Например, я хочу сделать возможность пользователям “дружить”. Сделать это можно так.
class Person(models.Model):
...
friends = models.ManyToManyField('self')
Но, например, нужна возможность подтверждать дружбу. Т.е. нужно, чтобы где-то хранилась информация об этой связи (например, active, date и т.п.)
Если делать связь между разными таблицами, то это будет выглядеть так:
class Person(models.Model):
...
groups = models.ManyToManyField('Group', through='Membership')
class Group(models.Model):
...
class Membership(models.Model):
...
group = models.ForeignKey(Group)
person = models.ForeignKey(Person)
# дополнительная информация о связи
date_entered = models.DateTimeField(auto_now_add=True)
status = models.IntegerField()
В классе membership и будет содержатсья дополнительная инофрмация. И, если я захочу выбрать из определенной группы всех пользвателей, вступивших в 2007 году, сделаю так:
persons = Group.person_set.objects.filter(membership__date_entered__year=2007)
Но в django нельзя реализовать связь многие-ко-многим к себе самому через какой-то другой класс. Что можно сделать?