Проверка на член в множестве ко многим в Django - PullRequest
0 голосов
/ 12 ноября 2018

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

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

И у меня есть следующий объект комнаты,

class Room(Base):
    name = models.CharField(db_index=True, unique=True, max_length=255)
    status = models.CharField(default=RoomStatus.ACTIVE, max_length=255, null=True)
    members = models.ManyToManyField(User)
    last_activity = models.DateTimeField(default=timezone.now)

Я пытаюсь найти, присутствует ли пользователь вкомната как участник,

user = User.objects.get(id=kwargs.get('user_id'))
room = Room.objects.get(id=kwargs.get('room_id'))

Это не работает,

member = room.members.filter(user=user)

Как я могу сделать это правильно

1 Ответ

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

С помощью одного запроса вы можете отфильтровать:

Room.objects.filter(id=kwargs['room_id'], members__id=kwargs['user_id']).exists()

Или, если вам все равно нужны Room и User, в любом случае:

room = Room.objects.get(id=kwargs['room_id'])
user = User.objects.get(id=kwargs.get('user_id'))
if user in room.members.all():
    # ...
    pass

Вы также можете отфильтроватьroom.members для id=user_id:

if room.members.filter(id=kwargs['user_id']).exists():
    # ...
    pass
...