Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将QuerySet上的多个过滤器与django过滤器相结合_Django_Django Filter - Fatal编程技术网

将QuerySet上的多个过滤器与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

比如说,我有以下两种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))
)
也就是说,我希望有一组过滤器字段,这些字段都应用于相关的模型,并且可以组合。在我的例子中,该集合包含更多字段,因此自定义的
多值字段
可能并不真正适用


使用
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的范围是“常见的过滤问题”-不常见的问题可能仍然需要手动解决。:-)