说,我有以下两个Django模型:
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
name = models.CharField(max_length=300)
pages = models.IntegerField()
author = models.ForeignKey(Author)
使用django-filter
,如何编写FilterSet
,这样我就可以过滤一下:
Author.objects.filter(
(Q(book__name__contains='How') & Q(book__pages=100)) |
(Q(book__name__contains='Why') & Q(book__pages=50))
)
也就是说,我希望有一组过滤器字段,它们都应用于相关模型并且我可以组合。就我而言,该集合包含更多字段,因此自定义MultiValueField
可能并不适用。
是否有任何标准方法可以使用django-filter
解决此问题,还是应该在视图中实现自己的过滤逻辑?
答案 0 :(得分:1)
如果您希望将其保留在FilterSet
中,而不是推回到视图,最好的办法是覆盖qs
属性并在那里添加多值过滤逻辑。
(包含自定义method
的字段提供了验证功能,但仍然只需要一个值 - 因此您需要从parent
中提取其他值 - 因此,覆盖{{1}似乎更清楚。)