Django:两步的RelatedManager

时间:2011-09-12 09:29:42

标签: django django-custom-manager django-related-manager

我有三个由外键链接的模型:

class One(models.Model):
    ...

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

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

我能做到:

one.two_set.all()

从'One'实例访问所有相关的'Two'实例。

如何构建自定义管理器以从“One”实例访问所有“三个”实例?

我需要这个,因为我有一个框架,它根据一个实例和一个管理器构建一个HTML表:

create_child_table(instance, manager_name)

所以,如果我可以在实例上使用'three_set'管理器,那就没问题了。

我最后添加了一个从三到一的ForeignKey。 感谢您的回答让我想起了KISS的理念。

2 个答案:

答案 0 :(得分:1)

您不需要经理。这样就可以了:

Three.objects.filter(two__one=one)

答案 1 :(得分:1)

您可以使用reverse relationship。您可以使用相关模型的小写名称,例如twothree,例如:

one_tow_three = One.objects.all().values('two','two__three')