Приложение Django, похоже, не распознает связанное имя?
У меня есть приложение django с моделью User, которая содержит поле followers, которое служит для того, чтобы содержать тех, кто следует за пользователем, и с помощью related_name мы можем получить тех, за кем следует пользователь. И наоборот. Печать последователей пользователя работает, но я не могу заставить работать последователей.
views.py
followers = User.objects.get(username='bellfrank2').followers.all()
following = User.objects.get(username='bellfrank2').followees.all()
print(followers)
print(following)
models.py
class User(AbstractUser):
followers = models.ManyToManyField('self', blank=True, related_name="followees")
Ошибка:
AttributeError: 'User' object has no attribute 'followees'
Согласно документации все рекурсивные отношения "многие ко многим" также симметричны по умолчанию.
Смотрите здесь: https://docs.djangoproject.com/en/4.0/ref/models/fields/#django.db.models.ManyToManyField.symmetrical
Когда Django обрабатывает эту модель, он определяет, что в ней есть поле ManyToManyField, и в результате не добавляет атрибут person_set к классу Person. Вместо этого предполагается, что поле ManyToManyField является симметричным - то есть, если я твой друг, то и ты мой друг.
Итак, чтобы ваше поле действительно создало атрибут followees, вам нужно установить атрибут symmetrical в значение False.
models.py
class User(AbstractUser):
followers = models.ManyToManyField('self', blank=True, related_name="followees", symmetrical=False)