我正在尝试在Django中创建用户和关注者关系,如下所示
id | user_id | follower_id
1 | 20 | 45
2 | 20 | 53
3 | 32 | 20
为此,我做了以下事情:
class UserFollower(models.Model):
user_id = models.ForeignKey(User)
follower_id = models.ForeignKey(User)
def __str__(self):
return "{} following {}".format(self.follower_id.username, self.user_id.username)
其中User
是django.contrib.auth.models.User
模型。在运行makemigrations
时,我收到以下错误:
ERRORS:
AppName.UserFollower.follower_id: (fields.E304) Reverse accessor for 'UserFollower.follower_id' clashes with reverse accessor for 'UserFollower.user_id'.
HINT: Add or change a related_name argument to the definition for 'UserFollower.follower_id' or 'UserFollower.user_id'.
AppName.UserFollower.user_id: (fields.E304) Reverse accessor for 'UserFollower.user_id' clashes with reverse accessor for 'UserFollower.follower_id'.
HINT: Add or change a related_name argument to the definition for 'UserFollower.user_id' or 'UserFollower.follower_id'.
我的问题是,为什么这是错的?我该如何解决这个问题?
答案 0 :(得分:6)
您需要添加related_name
class UserFollower(models.Model):
user_id = models.ForeignKey(User,related_name="users")
follower_id = models.ForeignKey(User,related_name="followers")
为什么会这样
“如果模型有ForeignKey,则外键模型的实例将会 有权访问返回第一个实例的Manager 模型。默认情况下,此Manager名为FOO_set,其中FOO为 源模型名称,小写。“
但是如果模型中有多个外键,则django无法使用 为外键管理器生成唯一的名称。你可以帮忙 将“related_name”参数添加到的foreignkey字段定义中 你的模特。
所以,你可以在django docs
中阅读更多内容