Django:两步RelatedManager

发布于 2024-12-04 09:01:58 字数 552 浏览 0 评论 0原文

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

class One(models.Model):
    ...

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

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

我可以这样做:

one.two_set.all()

从“一个”实例访问所有相关的“两个”实例。

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

我需要这个,因为我有一个框架,可以根据给定的实例及其管理器之一构建 HTML 表:

create_child_table(instance, manager_name)

因此,如果我可以在实例上使用“三集”管理器,那就太好了。

解决方案 我最终添加了一个从三到一的外键。 感谢您的回答让我想起了 KISS 哲学。

I have three models linked by foreign keys:

class One(models.Model):
    ...

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

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

and I can do:

one.two_set.all()

to access all related 'Two' instances from a 'One' instance.

How can I build a custom manager to access all 'Three' instances from a 'One' instance?

I need this because I have a framework which builds an HTML table given an instance and one of its managers:

create_child_table(instance, manager_name)

so, it would be fine if I can have a 'three_set' manager to be used on the instance.

SOLUTION
I ended up by adding a ForeignKey from Three to One.
Thanks to your answers that reminded me of the KISS philosophy.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

痴情换悲伤 2024-12-11 09:01:58

你不需要经理。这将做到这一点:

Three.objects.filter(two__one=one)

You don't need a manager. This will do it:

Three.objects.filter(two__one=one)
何以畏孤独 2024-12-11 09:01:58

您可以使用反向关系 。您可以使用相关模型的小写名称,在您的情况下为 twoThree 例如:

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

You can use the reverse relationship. You can use the lower case name of the related model, in your case two and three eg:

one_tow_three = One.objects.all().values('two','two__three')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文