Django:2个QuerySets和Duplicates

时间:2010-12-04 17:03:09

标签: django

我有两个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中做到这一点。或?

谢谢! :) 埃里克

2 个答案:

答案 0 :(得分:2)

如果您需要两组结果,您可以将查询转换为列表并添加列表,或者您可以使用“Q”对象和/或它们来组合查询逻辑:http://docs.djangoproject.com/en/1.2/topics/db/queries/#complex-lookups-with-q-objects

答案 1 :(得分:0)

您可以使用|运算符。即

Queryset1 | Queryset2这相当于集合中的联合。 Queryset1 & Queryset2将为您提供集合的交集