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

syn*_*nic 1 django

鉴于以下两种模式:

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

class User(models.Model):
    owned_cards = models.ManyToManyField(Card)
Run Code Online (Sandbox Code Playgroud)

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

Kil*_*nDS 5

它实际上非常简单,您可以使用用户对象的owned_cards字段作为管理器.

enabled_cards = theuser.owned_cards.filter(disabled=False)
Run Code Online (Sandbox Code Playgroud)

在评论中回答第二个问题,这应该有效,使用Q对象来否定查找.

not_owned_cards = Card.objects.filter(~Q(id__in=theuser.owned_cards.all()), disabled=False)
Run Code Online (Sandbox Code Playgroud)