此问题扩展为this one。
假设我的模型是
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
中统一两个条件?
答案 0 :(得分:0)
我不认为django-filter支持开箱即用。您可以尝试创建自己的Filter类并覆盖filter()
方法。
Querysets支持|
(union)运算符,因此您可以将默认结果与字段结果为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')
我没有对此代码进行测试,因此它可能无法完全按照书面形式运行,但您明白了。