通过ManyToMany关系检查另一个模型中的存在来过滤模型

时间:2010-08-05 20:58:40

标签: django

鉴于以下两个模型:

class Card(models.Model):
    disabled = models.BooleanField(default=False)

class User(models.Model):
    owned_cards = models.ManyToManyField(Card)

鉴于某个用户,我如何在一个查询中获取所有未禁用的Card对象,并且还存在于该用户的owned_cards字段中?

1 个答案:

答案 0 :(得分:5)

实际上非常简单,您可以将用户对象的owned_cards字段用作管理器。

enabled_cards = theuser.owned_cards.filter(disabled=False)

回答评论中的第二个问题,这应该有效,使用Q objects来否定查找。

not_owned_cards = Card.objects.filter(~Q(id__in=theuser.owned_cards.all()), disabled=False)