2009-10-29 50 views
3

我必须使用已经过滤的查询集,例如。 qs = queryset.filter(language ='de')但是在一些进一步的操作中,我需要撤销一些已经应用的过滤,例如,不仅仅取出language ='de'的行,而是取所有语言的条目。有没有办法再次应用过滤器,并使用或不添加连接到已有的新参数,例如。如果queryset已经过滤了language ='de',并且我可以连接'OR语言='en',那么它会给我我想要的东西! 谢谢!Django:扩展查询集/连接多个过滤器或

回答

2

我不相信有可能做你在问什么。

你在Django做口服补液盐的方法是这样的:

Model.objects.filter(Q(question__startswith='Who') | Q(question__startswith='What')) 

所以如果你真的想这样做:

Model.objects.filter(Q(language='de') | Q(language='en')) 

你需要把它们都在同一个过滤器( )调用,以便在稍后的filter()调用中不能添加其他或子句。

我想你可能会试图做到这一点的原因是,你担心再次击中数据库,但获得准确结果的唯一方法是再次击中数据库。

如果你只是关心生产清洁,干燥的代码,你可以把所有通用于顶部的两个查询,然后“叉”该查询以后设置过滤器,这样的:

shared_qs = Model.objects.filter(active=True) 
german_entries = shared_qs.filter(language='de') 
german_and_english = shared_qs.filter(Q(language='de') | Q(language='en')) 
+0

以及这也是我的想法,我可以使用Q在一个过滤器中进行“或”查询!只是想知道是否还有其他可能!谢谢! –

+1

它看起来不像你,但如果你使用m2m关系,请仔细阅读那些关于这些文档的文档,它们很棘手:http://docs.djangoproject.com/zh/dev/topics/db/查询/#跨越,多值,关系 –