【发布时间】:2011-12-27 14:33:04
【问题描述】:
我正在使用django-filter 应用程序。但是有一个问题我不知道如何解决。这与 django 文档中描述的几乎完全相同:
https://docs.djangoproject.com/en/1.2/topics/db/queries/#spanning-multi-valued-relationships
我想进行查询,选择所有在标题和中具有both“Lennon”的条目的所有博客并且于 2008 年发布,例如: p>
Blog.objects.filter(entry__headline__contains='Lennon',
entry__pub_date__year=2008)
不要选择标题中包含“Lennon”的条目和 2008 年发布的另一个条目(可能相同)的博客:
Blog.objects.filter(entry__headline__contains='Lennon').filter(
entry__pub_date__year=2008)
但是,如果我将过滤器设置为有两个字段(没关系 __contains x __exact,只是一个示例):
class BlogFilter(django_filters.FilterSet):
entry__headline = django_filters.CharFilter()
entry__pub_date = django_filters.CharFilter()
class Meta:
model = Blog
fields = ['entry__headline', 'entry__pub_date', ]
django-filter 将生成后者:
Blog.objects.filter(entry__headline__exact='Lennon').filter(
entry__pub_date__exact=2008)
有没有办法将两个过滤器组合成一个过滤器字段?
【问题讨论】:
-
很抱歉恢复了这个旧线程,但
Foo.objects.filter(foo="bar").filter(qux="quux")实际上与Foo.objects.filter(foo="bar", qux="quux")相同,多个关键字参数和随后的过滤器是“AND”在一起的。要创建“或”过滤器,您必须使用Q对象:docs.djangoproject.com/en/dev/topics/db/queries/… -
@cvk 嗨,根据docs.djangoproject.com/en/dev/topics/db/queries/…(开发版和 1.2 版),使用两个链式过滤器会生成“选择所有包含标题中带有“列侬”条目的博客以及一个条目发表于 2008 年”,但是当使用带有逗号的单个博客时,它会产生“选择所有包含标题中带有“列侬”的条目且于 2008 年发布的博客(同一条目同时满足两个条件)”。这是一个巨大的差异。我还没有找到使用 django-filter 的方法
标签: python django django-filter