Django:一对多查询

时间:2011-10-08 09:22:42

标签: django one-to-many django-queryset

我的数据库结构中有很多一对多的关系。例如,你有一个用户,用户有很多学位,他有很多电子邮件,他有很多合同等。

我在Django的查询集中发现了这个“select-related()”功能,看起来很棒。然而它不会“向后”,它只适用于您开始使用的表具有所有其他表的外键,但如果它是一对多,则您不会将所有外键存储在用户中表。

所以我的问题是,有什么方法可以,

  1. 点击数据库一次
  2. 仍然可以使用Django的漂亮的面向对象模型,理想情况下就像user.degree [0] .school_name - 这会很棒。
  3. 任何帮助将不胜感激!!

    编辑1:嗯实际上我刚才意识到,从技术上讲,用户表不包含任何字段名称度。您知道学位与用户相关联的唯一方法是通过学位表并查找用户外键。所以在某种程度上,这有点像数据库视图...

    编辑2:我猜你可以在数据库中创建一个包含大量JOIN的视图,并在Django中创建一个模型来镜像该视图吗?只需要弄清楚所有不同的数据库如何处理视图上的INSERT / UPDATE / DELETE ...不确定是否有列表,我现在正在使用postgresql。

1 个答案:

答案 0 :(得分:0)

您应该查看django-unjoinify,它允许您使用自己的自定义优化SQL,并允许您将结果映射到特定模型。

如果你采取创建数据库视图的路线,(我自己创建了很多,我认为这是一个好主意。)你应该覆盖模型的save() delete(),{{ 1}}和类似的方法实际写入相应的表。

确实是一种经典的数据库智慧“为您需要的所有内容发送一个查询,而不是每个记录一个查询”。上述两种方法都有助于实现它。