Пишу для себя приложение relatives, которое предназначено для ведения дерева родственников.

Есть такие модельки (сокращённо):

SEX = enumerate([u'Мужской', u'Женский', ])
REL_TYPE = enumerate([u'Приёмные родители', u'Брак', ''])


class Person(models.Model):
    father = models.ForeignKey('Person', related_name=u'my_father', null=True, blank=True)
    mother = models.ForeignKey('Person', related_name=u'my_mother', null=True, blank=True)
    fname = models.CharField(u'Фамилия', max_length=128, null=True, blank=True)
    iname = models.CharField(u'Имя', max_length=128, null=True, blank=True)
    oname = models.CharField(u'Отчество', max_length=128, null=True, blank=True)
    sex = models.IntegerField(u'Пол', choices=SEX)
    birth_year = models.IntegerField(u'Год рождения', null=True, blank=True)
    birth_month = models.IntegerField(u'Месяц рождения', null=True, blank=True)
    birth_day = models.IntegerField(u'День рождения', null=True, blank=True)
    death_year = models.IntegerField(u'Год смерти', null=True, blank=True)
    death_month = models.IntegerField(u'Месяц смерти', null=True, blank=True)
    death_day = models.IntegerField(u'День смерти', null=True, blank=True)
    relation = models.ManyToManyField('Person', related_name='children', through='Relation')

class Relation(models.Model):
    src = models.ForeignKey('Person', related_name=u'related_src')
    dst = models.ForeignKey('Person', verbose_name=u'С кем', related_name=u'related_dst')
    begin_year = models.IntegerField(u'Год начала', null=True, blank=True)
    begin_month = models.IntegerField(u'Месяц начала', null=True, blank=True)
    begin_day = models.IntegerField(u'День начала', null=True, blank=True)
    end_year = models.IntegerField(u'Год завершения', null=True, blank=True)
    end_month = models.IntegerField(u'Месяц завершения', null=True, blank=True)
    end_day = models.IntegerField(u'День завершения', null=True, blank=True)
    otype = models.IntegerField(u'Связь', choices=REL_TYPE)

Такая организация моделей позволяет мне всяко разно связывать людей.

Но возник вопрос, как в админке через инлайны показать братьев и сестёр для редактируемого человека. Что-то я подвис...

Вроде бы всё можно решить через метод queryset инлайна:

def queryset(self, request):
    qs = super(BrotherRelationInline, self).queryset(request)

Но как-то надо передавать туда указатель на текущий объект.

Ещё одна проблема заключается в том, что из-за двух FK в модели Person требуется в инлайне указать свойство fk_name. Получается, что надо создавать один инлайн для братьев/сестёр по отцу и один для братьев/сестёр по матери. Но пока это не так важно из-за проблем с queryset.

Нужна правильная мысль!