Skip to main content
 首页 » 编程设计

python之在 Django 中检查多对多集合中的成员

2024年09月03日31TianFang

我有以下用户类,

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