Несколько запросов в Django ORM - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть следующая модель пользователя,

class User(AbstractBaseUser, PermissionsMixin, Base):
    email = models.EmailField(db_index=True, unique=True, max_length=255)
    mobile = PhoneNumberField(null=True)

и модель комнаты,

class Room(Base):
    name = models.CharField(db_index=True, unique=True, max_length=255)
    members = models.ManyToManyField(User)

Я хочу проверить, существует ли комната, в которой члены a и b являются членами. Я попробовал это,

PrivateRoom.objects.filter(members__id=first.id, members__id=second.id).exists()

Это дает мне ошибку keyword argument repeated. Может кто-нибудь помочь мне с запросом.

1 Ответ

0 голосов
/ 18 ноября 2018

Вам нужно разделить это на два .filter(..) звонка:

PrivateRoom.objects.filter(members__id=first.id).filter(members__id=second.id).exists()

Не только потому, что вы не можете использовать такой же именованный аргумент в вызове функции Python, но если это возможно (это относится к Q объектам), это будет означать, что вы ищете один член с id равными first.id и second.id.

Это не то, что вы хотите: вы хотите два разных JOIN: один для первого участника и один для второго.

...