首页 > 解决方案 > 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 座位布局,那么它会提供来自CovidSeatLayoutelse 的信息/列表它会提供基于巴士公司过滤的巴士列表

所以这是我的序列化程序。

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 实例从视图发送到用例。我该如何解决这个问题?

标签: pythondjangodjango-rest-framework

解决方案


推荐阅读