Django 多对多关系不返回 set 对象



我有以下用户模型

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_nameuser.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')

最新更新