Django ManyToMany filter()
我有一个模型:
class Zone(models.Model): name = models.CharField(max_length=128) users = models.ManyToManyField(User, related_name='zones', null=True, blank=True)
我需要构build一个filter:
u = User.objects.filter(...zones contains a particular zone...)
它必须是用户的filter,它必须是一个单一的filter参数。 原因是我正在构造一个URL查询string来过滤pipe理用户更改列表: http://myserver/admin/auth/user/?zones=3
这似乎应该是简单的,但我的大脑不合作!
只是重申托马斯所说的话。
在多对多和多对一testing中有很多FOO__in=...
样式filter的例子。 这里是你的具体问题的语法:
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])
在使用查询集时,双下划线(__)语法在整个地方使用。
请注意,如果用户可能位于查询中使用的多个区域中,则可能需要添加.distinct()。 否则你多次获得一个用户:
users_in_zones = User.objects.filter(zones__in=[zone1, zone2, zone3]).distinct()