0

嗯,有一个复杂的查询。假设我们有 3 张桌子。

class Logs:
    user = ForeignKey(User)
    ...

class User:
    name = CharField()
    ...

class User_Info:
    user = ForeignKey(User)
    address = CharField()
    ...

我想要做的是通过用户关联表 Logs 和 User_Info。基本上,我想做一个连接,以获取一个新表,该表将包含来自日志、用户和来自 User_Info 的地址的所有字段。我知道 select_related。但它只能结合日志和用户。

如何让 User_Info 参与其中?我想最小化数据库调用。所以理想的答案应该是一个数据库命中。

编辑:我很欣赏下面的回答。我只想为这个问题提供我的最终解决方案。

如果您确实有一些复杂的查询,只需使用 objects.raw()。它将解决您的大部分问题。

4

2 回答 2

1

模型.py

class User:
    name = CharField()

    def logs(self):
        return Logs.objects.filter(user=self)

    def info(self):
        return User_Info.objects.filter(user=self)

视图.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 %}
于 2013-03-26T02:58:01.307 回答
0

首先,数据库调用的数量不一定与代码行数有关——Queryset API 中的许多方法都是惰性的。

看起来您实际上在Userand之间存在一对一的关系User_Info。在这种情况下,您可以使用 aOneToOneField而不是 a ForeignKey。然后,您可以直接从User模型访问您的信息。请参阅 https://docs.djangoproject.com/en/dev/topics/db/examples/one_to_one/

于 2013-03-25T19:54:43.290 回答