Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 7, 2011 18:59:13

Lolka
От:
Зарегистрирован: 2007-09-29
Сообщения: 128
Репутация: +  0  -
Профиль   Отправить e-mail  

AND для M2M

Есть две модели

class Genre(models.Model):
...

class Film(models.Model):
genres = models.ManyToManyField(Genre)
Чтобы выбрать фильмы, которые есть хотя бы в одном из жанров (т.е. ИЛИ id=1 или id=2) можно написать Film.objects.filter(genres__id__in=), а как выбрать фильмы, которые есть в каждом из требуемых жанров (т.е. И id=1, id=2)?



Отредактировано (Фев. 7, 2011 18:59:57)

Офлайн

#2 Фев. 7, 2011 19:53:28

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

AND для M2M

Lolka
Чтобы выбрать фильмы, которые есть хотя бы в одном из жанров (т.е. ИЛИ id=1 или id=2) можно написать Film.objects.filter(genres__id__in=), а как выбрать фильмы, которые есть в каждом из требуемых жанров (т.е. И id=1, id=2)?
from django.db.models import Q
Film.objects.filter(Q(genres__id=1) & Q(genres__id=2))



Офлайн

#3 Фев. 8, 2011 14:38:27

Lolka
От:
Зарегистрирован: 2007-09-29
Сообщения: 128
Репутация: +  0  -
Профиль   Отправить e-mail  

AND для M2M

Не получается, возвращает 0 записей. Получается так: Film.objects.filter(genres__id=1).filter(genres__id=2)
Как быть?



Офлайн

#4 Фев. 8, 2011 17:43:18

svas
От:
Зарегистрирован: 2010-01-27
Сообщения: 239
Репутация: +  9  -
Профиль   Отправить e-mail  

AND для M2M

Lolka
Не получается, возвращает 0 записей.
Ну так значит нет фильмов принадлежащих одновременно жанрам с id 1 и 2



Офлайн

#5 Фев. 8, 2011 17:45:21

Lolka
От:
Зарегистрирован: 2007-09-29
Сообщения: 128
Репутация: +  0  -
Профиль   Отправить e-mail  

AND для M2M

Есть :) Такой чейн его возвращает: Film.objects.filter(genres__id=1).filter(genres__id=2)



Отредактировано (Фев. 8, 2011 17:45:51)

Офлайн

#6 Фев. 10, 2011 15:36:28

svas
От:
Зарегистрирован: 2010-01-27
Сообщения: 239
Репутация: +  9  -
Профиль   Отправить e-mail  

AND для M2M

Да, действительно, так не работает

Film.objects.filter(Q(genres__id=1) & Q(genres__id=2))



Офлайн

#7 Фев. 10, 2011 15:45:07

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

AND для M2M

Film.objects.filter(Q(genres__id=1), Q(genres__id=2))



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version