«я» аргумент не будет работать, если у вас есть модель под названием self
.
Предполагая, что ваша модель присваивания называется Following
, и вы используете встроенный в User
модели, то вы можете сделать:
class Following(models.Model):
target = models.ForeignKey('User', related_name='followers')
follower = models.ForeignKey('User', related_name='targets')
Это, вероятно, потребуется некоторая дальнейшая уникальность и проверка логики.
Примечание: related_name
атрибут, см. https://docs.djangoproject.com/en/1.10/ref/models/fields/#django.db.models.ForeignKey.related_name. Это означает, что для данного пользовательского объекта вы можете сделать user.targets.all()
, чтобы получить пользователей, которых они следуют, и user.followers.all()
, чтобы получить пользователей, которые следуют за ними.
Обратите внимание, что Django возвращает экземпляры целевой модели, а не идентификаторы, в ORM. Это означает, что хотя базовую таблицу можно назвать follower_id
, в коде python following.follower
вернет фактический объект User.
Я сделал this..but я получаю эту ошибку: main.followers.follower_id: (fields.E304) Обратный аксессор для столкновений «followers.follower_id» с обратным аксессором для «followers.user». \t СОВЕТ. Добавьте или измените аргумент related_name в определение «followers.follower_id» или «followers.user». – Sach
и «я» для рекурсивных отношений ... правильно? – Sach
А, да. Django создает обратные отношения, чтобы вы могли следить за отношениями назад. Я изменил свой ответ, чтобы добавить атрибут 'related_name'. – nimasmi