我有以下用户模型
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)
与房间有一个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'
我在这里做错了什么?
答案 0 :(得分:3)
这只是因为您已将 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')
如果你想使用django classname_set
;只需删除related_name
,即user.room_set.all
即可使用
答案 1 :(得分:1)
试试这个
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')
答案 2 :(得分:1)