Фильтр 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



кажется, что это должно быть простой, но мой мозг не сотрудничает!

535   2  

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

    Ничего не найдено.