Доступ к самореферентному полю в Django - PullRequest
1 голос
/ 18 марта 2020

У меня есть класс User, с полем friends

class User(AbstractUser):
    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['password']
    username = models.CharField(max_length=30, unique=True)
    password = models.CharField(max_length=100)
    friends = models.ManyToManyField('self')

, когда я перенес класс в базу данных, он создал две таблицы. app_user и app_user_friends

app_user сами по себе не имеют отношения к друзьям, но app_user_friends имеет id пользователя и id друга.

Проблема заключается в следующем: qhen я пытаюсь получить доступ к друзьям пользователя, позвонив по номеру

      user = models.User.objects.get(id=user_id)
      print(user.friends)

Я получу

      app.User.None

Должен ли я звонить по-другому или что-то не так с моделью?

1 Ответ

1 голос
/ 18 марта 2020

Должен ли я назвать это по-другому или что-то не так с моделью?

В вашей модели нет ничего плохого . user.friends это просто RelatedManager. Чтобы получить всех друзей, вам нужно добавить .all() (точно так же, как вам нужно добавить это, например, для User.objects):

print(user.friends<b>.all()</b>)

Обратите внимание, что по умолчанию ManyToManyField s к та же модель симметрия c. Это означает, что если a является другом b , то b является другом a . Это не неправильно . Для получения дополнительной информации посмотрите параметр symmetrical=&hellip; [Django -doc] .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...