首页 > 解决方案 > Django多对多关系不返回集合对象

问题描述

我有以下用户模型

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 具有多对多关系

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'

我在这里做错了什么?

标签: pythondjangodjango-modelsdjango-orm

解决方案


只是因为您已将related_name更改为users

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

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

请注意,使用 的复数命名related_nameclass_name更方便,因此您将拥有:

class Room(models.Model)
    users = models.ManyToManyField(User, related_name='rooms')

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


推荐阅读