Фильтр Django ManyToMany()
у меня есть модели:
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...)
Это должен быть фильтр для пользователя, и это должен быть один параметр фильтра. Причина этого заключается в том, что я создаю строку запроса URL для фильтрации списка изменений пользователя admin: http://myserver/admin/auth/user/?zones=3
кажется, что это должно быть простой, но мой мозг не сотрудничает!
2 ответов:
просто повторяю то, что сказал Томаш.
есть много примеров
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.
обратите внимание, что если пользователь может быть в нескольких зонах, используемых в запросе, вы, вероятно, хотите добавить .четкий.)( В противном случае вы получаете один пользователь несколько раз:
users_in_zones = User.objects.filter(zones__in=[zone1, zone2, zone3]).distinct()
Comments