【发布时间】:2011-10-24 16:00:03
【问题描述】:
所以我有几个 Q 对象的查询,这些对象被 OR-ed 在一起(以实现 UNION),我想注释每个 Q 对象匹配的结果。因此,当我去显示我的查询结果时,我可以突出显示每个结果中点击了哪些搜索词。
下面是生成查询集的代码:
Gene.objects.filter(Q(EC__EC='3.2.1.4')|Q(Protein_Family__name__in=famList)|Q(Pfam__Pfam__in=pfams),Protein_length__gte=100, Distance_From_Contig_Upstream__gte=10, Distance_From_Contig_Downstream__gte=10).distinct()
我想我可以使用 .extra 选项添加这个带注释的列: https://docs.djangoproject.com/en/1.3/ref/models/querysets/#extra
如果我不能这样做,我可能会做三个单独的查询,然后注释结果,然后将查询集 OR 在一起......我认为这可能非常浪费,而且看起来很笨拙。
【问题讨论】:
-
你不能 OR 查询集在一起。一旦它们被执行,它们就只是结果集的迭代器。如果您需要 OR 条件,这就是 Q 对象的用途。
-
@saverio 实际上,您可以:github.com/django/django/blob/master/tests/modeltests/…,但是您说得对,通常应该使用 Q 对象。
标签: django union django-queryset annotate django-q