将QuerySet上的多个过滤器与django过滤器相结合
比如说,我有以下两种Django型号:将QuerySet上的多个过滤器与django过滤器相结合,django,django-filter,Django,Django Filter,比如说,我有以下两种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 filt
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))
)
也就是说,我希望有一组过滤器字段,这些字段都应用于相关的模型,并且可以组合。在我的例子中,该集合包含更多字段,因此自定义的多值字段
可能并不真正适用
使用
django filter
有没有标准的方法来解决这个问题,或者我应该在视图中实现我自己的过滤逻辑?如果您想将其保留在过滤器集中,而不是推回到视图,最好的办法是覆盖qs
属性并在那里添加多值过滤逻辑
(一个带有自定义方法的字段提供了验证,但仍然只接受一个值-因此您无论如何都需要从父项中提取其他值-因此,覆盖qs
似乎更清晰。)如果您想将其保留在过滤器集中,而不是将其推回到视图中,最好的方法是覆盖qs
属性,并在那里添加多值过滤逻辑
(带有自定义方法
的字段提供验证,但仍然只接受一个值-因此您需要从父项
中提取其他值-因此,覆盖qs
似乎更清楚。)请求查询字符串在这里是什么样子?如何区分要筛选的两组Q
对象??book\u name\u 1=How&book\u pages\u 2=100&book\u name\u 2=why&book\u pages\u 2=50
请求查询字符串在这里是什么样子?如何区分要筛选的两组Q
对象??book\u name\u 1=How&book\u pages\u 2=100&book\u name\u 2=why&book\u pages\u 2=50
我认为是这样,并决定在视图中使用标准django表单手动执行此操作将是一个更容易、更可读的解决方案。然而,你的答案仍然是使用django过滤器的正确方法,所以我会接受。是的,很公平。Django Filter的范围是“常见的过滤问题”-不常见的问题可能仍然需要手动解决。:-)我这样认为,并决定在视图中使用标准django表单手动执行该操作将是一个更简单、更可读的解决方案。然而,你的答案仍然是使用django过滤器的正确方法,所以我会接受。是的,很公平。Django Filter的范围是“常见的过滤问题”-不常见的问题可能仍然需要手动解决。:-)