上查询集结合使用多种过滤器和Django过滤
说,我有以下两种Django模型:上查询集结合使用多种过滤器和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
,或者我应该在视图中实现我自己的过滤逻辑?
如果你想保留这个在FilterSet
,而不是回到视图,你最好的选择是覆盖qs
属性,并在那里添加多值过滤逻辑。
(使用自定义method
提供了验证,但仍然只需要一个值的字段 - 所以你需要拉从parent
别人无论如何 - 这样,覆盖qs
显得更加清晰。)
我认为是这样,并决定在视图中以标准django形式手动执行操作会更容易且更易读。然而,你的答案仍然是'django-filter'的正确方法,所以我会接受它。 – janoliver
是的,够公平的。 Django Filter的范围是“常见的过滤问题” - 不常见的可能需要手动完成。 :-) –
会是什么请求查询字符串看起来像这里?你如何区分你想过滤的两组'Q'对象? – Sherpa
'?book_name_1 = How&book_pages_2 = 100&book_name_2 = why&book_pages_2 = 50' – janoliver