Django ManyToMany filter()

我有一个模型:

class Zone(models.Model):

name = models.CharField(max_length=128)

users = models.ManyToManyField(User, related_name='zones', null=True, blank=True)

我需要按照以下原则构造一个过滤器:

u = User.objects.filter(...zones contains a particular zone...)

它必须是User的过滤器,并且必须是单个过滤器参数。这样做的原因是,我正在构造URL查询字符串以过滤管理员用户变更列表:http://myserver/admin/auth/user/?zones=3

看起来应该很简单,但我的大脑却不配合!

回答:

只是重申托马斯所说的话。

在多对多和多对一测试中,有很多FOO__in=...样式过滤器的示例。这是你特定问题的语法:

users_in_1zone = User.objects.filter(zones__id=<id1>)

# same thing but using in

users_in_1zone = User.objects.filter(zones__in=[<id1>])

# filtering on a few zones, by id

users_in_zones = User.objects.filter(zones__in=[<id1>, <id2>, <id3>])

# and by zone object (object gets converted to pk under the covers)

users_in_zones = User.objects.filter(zones__in=[zone1, zone2, zone3])

使用querysets时,会在各处使用双下划线(__)语法。

以上是 Django ManyToMany filter() 的全部内容, 来源链接: utcz.com/qa/416430.html

回到顶部