我有两个QuerySets,它们都包含相同模型类的实例。
class DBV:
name = CharField
description = TextField
review_state = CharField(choices=[u"Draft",u"Published",u"Archived"])
team_members = FK(User)
deleted = Boolean
这就是我过滤获取两个QuerySet的方法:
res = DBV.objects.filter(deleted=False).filter(team_members=user)
if user.has_perm('dbv.can_view_dbv'):
r = DBV.objects.filter(deleted=False).filter(review_state__in=[u'Published',u'Archived',])
res = res + r
第一个问题当然是,当您尝试添加QuerySet时,您会得到:
unsupported operand type(s) for +: 'QuerySet' and 'QuerySet'
那么,合并这些QuerySet并删除重复项的最佳方法是什么?我认为除了编写sql之外,还没有办法在Django中做到这一点。或?
谢谢! :) 埃里克
答案 0 :(得分:2)
如果您需要两组结果,您可以将查询转换为列表并添加列表,或者您可以使用“Q”对象和/或它们来组合查询逻辑:http://docs.djangoproject.com/en/1.2/topics/db/queries/#complex-lookups-with-q-objects
答案 1 :(得分:0)
您可以使用|
运算符。即
Queryset1 | Queryset2
这相当于集合中的联合。 Queryset1 & Queryset2
将为您提供集合的交集