在 Django 中检查多对多集合中的成员
Checking for a member in a many to many set in django
我有以下用户 class,
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)
我怎样才能正确地做到这一点
通过单个查询,您可以筛选:
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
您还可以为 id=user_id
筛选 room.members
:
if room.members.filter(id=kwargs['user_id']).exists():
# ...
pass
我有以下用户 class,
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)
我怎样才能正确地做到这一点
通过单个查询,您可以筛选:
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
您还可以为 id=user_id
筛选 room.members
:
if room.members.filter(id=kwargs['user_id']).exists():
# ...
pass