我目前正在尝试在用户之间创建以下关系,因此我在用户模型中使用了多对多字段来引用自身。class User(AbstractUser): followers = models.ManyToManyField('self', related_name='following') def __str__(self): return self.username但是,当我使用 shell 测试此模型并尝试访问 related_name 时,它报告发生了错误。>>> u1 = User.objects.get(pk=1)>>> u1.following.all()Traceback (most recent call last): File "<console>", line 1, in <module>AttributeError: 'User' object has no attribute 'following'现在我真的很困惑,真的需要帮助或其他方法来做到这一点。
3 回答
绝地无双
TA贡献1946条经验 获得超4个赞
它应该看起来像这样
class User(AbstractUser):
followers = models.ManyToManyField(
'self',
symmetrical=False,
related_name='following',
)
慕丝7291255
TA贡献1859条经验 获得超6个赞
我认为 Django 不允许我们在字段引用自身时给出 related_name 。
他们本质上做的是创建另一个名为 Following() 的模型,并用它来存储关系。
class Following(models.Model): target = models.ForeignKey('User', on_delete=models.CASCADE, related_name = "followers") follower = models.ForeignKey('User', on_delete=models.CASCADE, related_name = "targets")
慕姐4208626
TA贡献1852条经验 获得超7个赞
如果将多对多关系指定给其他模型,则 related_name 属性指定从用户模型返回到您的模型的反向关系的名称。
但在这种情况下......两个模型是相同的
所以你试试这个
u1 = User.objects.get(pk=1) u1.followers.all()
添加回答
举报
0/150
提交
取消