Django: двухшаговый RelatedManager - PullRequest
       23

Django: двухшаговый RelatedManager

1 голос
/ 12 сентября 2011

У меня есть три модели, связанные внешними ключами:

class One(models.Model):
    ...

class Two(models.Model):
    one = models.ForeignKey(One)

class Three(models.Model):
    two = models.ForeignKey(Two)

и я могу сделать:

one.two_set.all()

для доступа ко всем связанным экземплярам 'Two' из экземпляра 'One'.

Как создать собственный менеджер для доступа ко всем «трем» экземплярам из «одного»?

Мне это нужно, потому что у меня есть фреймворк, который создает таблицу HTML для данного экземпляра и одного из его менеджеров:

create_child_table(instance, manager_name)

так что было бы хорошо, если бы у меня был экземпляр 'three_set' для использования в экземпляре.

РЕШЕНИЕ Я закончил тем, что добавил ForeignKey от трех до одного. Благодаря вашим ответам, которые напомнили мне философию KISS.

Ответы [ 2 ]

1 голос
/ 12 сентября 2011

Вы можете использовать обратное соотношение . Вы можете использовать имя соответствующей модели в нижнем регистре, в вашем случае two и three, например:

one_tow_three = One.objects.all().values('two','two__three')
1 голос
/ 12 сентября 2011

Вам не нужен менеджер.Это сделает это:

Three.objects.filter(two__one=one)
...