我有以下用户模型
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)
与房间有多对多关系
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,related_name='rooms')
如果你想使用姜戈classname_set
之一;只需删除related_name
,user.room_set.all
就可以工作
房间模型中没有用户属性!
在房间类中使用它:
users= models.ManyToManyField(User)
另请参阅 django 文档示例 。
试试这个
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')