2015-02-26 2 views
1

Я пытаюсь создать отношения пользователя и следящие следующим образом в DjangoДобавить два ForeignKey поля из одной модели в 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'. 

Мой вопрос здесь будет, почему именно это так? И как мне это исправить?

ответ

6

Вам нужно добавить related_name

class UserFollower(models.Model): 
    user_id = models.ForeignKey(User,related_name="users") 
    follower_id = models.ForeignKey(User,related_name="followers") 

Почему это

"If a model has a ForeignKey, instances of the foreign-key model will have access to a Manager that returns all instances of the first model. By default, this Manager is named FOO_set, where FOO is the source model name, lowercased."

But if you have more than one foreign key in a model, django is unable to generate unique names for foreign-key manager. You can help out by adding "related_name" arguments to the foreignkey field definitions in your models.

Таким образом, вы можете прочитать здесь, в Джанго docs

Смежные вопросы