在多对多字段中使用自引用时,Django related_name 不起作用

我目前正在尝试在用户之间创建以下关系,因此我在用户模型中使用了多对多字段来引用自身。


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'

现在我真的很困惑,真的需要帮助或其他方法来做到这一点。


动漫人物
浏览 142回答 3
3回答

绝地无双

它应该看起来像这样class User(AbstractUser):    followers = models.ManyToManyField(        'self',        symmetrical=False,        related_name='following',    )

慕丝7291255

我认为 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

如果将多对多关系指定给其他模型,则 related_name 属性指定从用户模型返回到您的模型的反向关系的名称。但在这种情况下......两个模型是相同的所以你试试这个u1 = User.objects.get(pk=1) u1.followers.all()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python