Django 多对多关系不 return 设置对象

Django many-to-many relationship doesn't return set object

我有以下用户模型

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(unique=True, max_length=255)
    mobile = PhoneNumberField(null=True)
    username = models.CharField(null=False, unique=True, max_length=255)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    is_active = models.BooleanField(default=False)

它与一个 Room 有 ManyToMany 关系

class Room(Base):
    name = models.CharField(unique=True, max_length=255)
    room_type = models.CharField(max_length=50, null=True)
    users = models.ManyToManyField(User, related_name='users')

当我运行以下查询时,

rooms = user.room_set.all()

我收到这个错误,

AttributeError: 'User' object has no attribute 'room_set'

我做错了什么?

只是因为你把related_name改成了users

users = models.ManyToManyField(User, related_name='users')

而不是 rooms = user.room_set.all() 试试 rooms = user.users.all().

请注意,用 class_name 的复数形式命名 related_name 更方便,因此您可以:

class Room(models.Model)
    users = models.ManyToManyField(User, <b>related_name='rooms'</b>)

如果你想使用djangoclassname_set;只需删除 related_name,这样 user.room_set.all 就可以了

试试这个

class Room(Model.models):
    user = models.ForignKey (User,ONCASCADE  = models.delete)
    name = models.CharField(unique=True, max_length=255)
    room_type = models.CharField(max_length=50, null=True)
    users = models.ManyToManyField(User, related_name='users')

您的房间模型中没有用户属性!

在房间 class 中使用这个:

 users= models.ManyToManyField(User)

另见 django doc examples