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)
我有以下用户模型
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)