簡體   English   中英

在Django中添加來自同一模型的兩個ForeignKey字段

[英]Add two ForeignKey Fields from same Model in Django

我正在嘗試在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)

其中Userdjango.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'.

我的問題是,為什么這是錯誤的? 我該如何解決呢?

您需要添加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”參數來提供幫助。

因此,您可以在Django 文檔中閱讀更多內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM