繁体   English   中英

django-filter和DRF:lookupfield中的AND子句

[英]django-filter and DRF: AND clause in a lookupfield

这个问题在这个问题上扩展。

假设我的模型是

class Car(models.Model):
    images = models.ManyToManyField(Image)

class Image(models.Model):
    path = models.CharField()
    type = models.CharField()

我的过滤器类是

class CarFilter(django_filters.FilterSet):
    having_image = django_filters.Filter(name="images", lookup_type='in')

    class Meta:
        model = Car

然后我可以进行诸如?having_image=5类的GET查询,并获取所有具有pk=5图像的汽车。 没关系。 但是,如果我需要在一张列表中退回带有此图像的汽车和完全没有图像的汽车,该怎么办? 如何在一个django_filters.Filter结合两个条件?

我认为django-filter不支持该功能。 您可以尝试创建自己的Filter类并覆盖filter()方法。

查询集确实支持| (联合)运算符,因此您可以将默认结果与字段结果为None结果组合。

class AndNoneFilter(django_filters.Filter):

    def filter(self, qs, value):
        return qs(**{self.field_name: None}) | super().filter(qs, value)

class CarFilter(django_filters.FilterSet):
    having_image = AndNoneFilter(field_name='images', lookup_type='in')

我没有测试过此代码,因此它可能无法完全按照编写的方式工作,但是您明白了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM