嗯,有一个复杂的查询。 假设我们有3张桌子。
class Logs:
user = ForeignKey(User)
...
class User:
name = CharField()
...
class User_Info:
user = ForeignKey(User)
address = CharField()
...
我想要做的是通过User关联表Logs和User_Info。 基本上,我想进行连接,以获取一个新表,其中包含来自User_Info的Logs,User和address中的所有字段。我知道select_related。但它只能组合日志和用户。
如何使用User_Info?我想最小化数据库调用。所以理想的答案应该是一个数据库命中。
编辑: 我很感激下面的回答。我只是想为这个问题提出最终解决方案。
如果您确实有一些复杂的查询,只需使用objects.raw()。它将解决你的大多数问题。
答案 0 :(得分:1)
<强> models.py 强>
class User:
name = CharField()
def logs(self):
return Logs.objects.filter(user=self)
def info(self):
return User_Info.objects.filter(user=self)
<强> views.py 强>
users = User.objects.filter()
<强>模板强>
{% for user in users %}
{{ name }}
{% for log in user.logs %}
//log fields
{% endfor %}
{% for info in user.info %}
//info fields
{% endfor %}
{% endfor %}
答案 1 :(得分:0)
首先,数据库调用的数量不一定与代码行数有关 - Queryset API中的许多方法都是惰性的。
看起来您实际上在User
和User_Info
之间存在一对一的关系。在这种情况下,您可以使用OneToOneField
代替ForeignKey
。然后,您可以直接从User
模型访问您的信息。看到
https://docs.djangoproject.com/en/dev/topics/db/examples/one_to_one/