New*_*wtt 1 python django django-models
我正在尝试在Django中创建如下的用户和关注者关系
id | user_id | follower_id
1 | 20 | 45
2 | 20 | 53
3 | 32 | 20
Run Code Online (Sandbox Code Playgroud)
为此,我做了以下事情:
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)
Run Code Online (Sandbox Code Playgroud)
这里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'.
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么这是错的?我该如何解决这个问题?
你需要添加 related_name
class UserFollower(models.Model):
user_id = models.ForeignKey(User,related_name="users")
follower_id = models.ForeignKey(User,related_name="followers")
Run Code Online (Sandbox Code Playgroud)
为什么这个
"如果模型具有ForeignKey,则外键模型的实例将有权访问返回第一个模型的所有实例的Manager.默认情况下,此Manager名为FOO_set,其中FOO是源模型名称,小写."
但是如果模型中有多个外键,则django无法为外键管理器生成唯一的名称.您可以通过向模型中的foreignkey字段定义添加"related_name"参数来提供帮助.
所以,你可以在django docs中阅读更多内容
| 归档时间: |
|
| 查看次数: |
336 次 |
| 最近记录: |