python - Django过滤器如何在其他条件下返回查询集
问题描述
我有以下模型。公共汽车和 Covid 座椅布局模型。
class Bus(BaseModel):
bus_company = models.ForeignKey(BusCompany, on_delete=models.CASCADE)
layout = models.ForeignKey(
SeatLayout,
on_delete=models.SET_NULL,
null=True
)
class CovidSeatLayout(BaseModel):
layout = models.ForeignKey(SeatLayout, on_delete=models.CASCADE)
bus_company = models.ForeignKey(BusCompany, on_delete=models.CASCADE)
locked_seats = models.ManyToManyField(Seat)
我已经按照以下方式设置了我的序列化程序,这样如果有 covid 座位布局,那么它会提供来自CovidSeatLayout
else 的信息/列表它会提供基于巴士公司过滤的巴士列表
所以这是我的序列化程序。
class ListCovidSeatLayoutSerializers(serializers.Serializer):
id = serializers.CharField(source='layout.id')
image = serializers.ImageField(source='layout.image')
name = serializers.CharField(source='layout.name')
covid_layout = serializers.CharField(source='id')
我通常使用 usecase.py 把我的逻辑放在这里是我的 usecase.py
class ListBusCompanyLayoutUseCase:
def __init__(self, bus_company: BusCompany):
self._bus_company = bus_company
def execute(self):
return self._factory()
# return self.covid_layout
def _factory(self):
# Filtering BusCompany From CovidSeatLayout
self.covid_layout = CovidSeatLayout.objects.filter(bus_company=self._bus_company)
# self.
self.bus = Bus.objects.filter(bus_company=self._bus_company)
if len(self.covid_layout) == 0:
return self.bus
else:
return self.covid_layout
covid_layout
基本上,如果没有 covid 布局,我想在序列化程序中不发送任何内容。Ps 上面的 usecase.py 代码最终在 views.py 上被调用,我们将 bus_company 实例从视图发送到用例。我该如何解决这个问题?
解决方案
推荐阅读
- .net-core - 在 Debian 上使用 .Net Core 的 Jenkins 管道失败 UnitTests
- xamarin - 在多个设备之间具有相同的控制宽度
- angular - NPM 构建挂在 azure dev ops 中
- python - 如何动态地水平堆叠 gif 以在 python 中创建一个 gif?
- python - pyspark groupby 并创建包含其他列字典的列
- python - PostgreSQL:更新特定列时通知
- reactjs - WebPack 为导入的样式表的类添加下划线,从而破坏反应组件的样式
- node.js - JWT 令牌流 - 注销案例
- blockchain - 如何在 Solidity 中连接两个字符串值
- linux - 如何在 Linux (CentOS 7) 上使用 CMAKE 从源代码构建 32 位 GRPC 二进制文件?