Django 联合查询
Posted
技术标签:
【中文标题】Django 联合查询【英文标题】:Django Union Query 【发布时间】:2013-07-13 06:54:57 【问题描述】:我需要在 Django 中开发一个 UNION 查询,其中包含 3 个模型,即 WebQuery、WebReply 和 BusinessOwners,输出应为以下形式。
"(#conversation_id#)_(#b_id#)":
"from": "(#user_id)",
"email": "(#user_email)",
"date_time": "#get from db",
"query": "are you open ?",
"from_r_id": "(#representative_id)",
"from_r_name": "(#rep_name)",
"business_registered": "FALSE"
"to_business_name": "CCD saket",
"chat": [
"direction": 1,
"text": "yes sir",
"date_time": "424 577"
,
"direction": 0,
"text": "ok",
"date_time": "424 577"
]
,
我知道只涉及一个模型时如何查询,但不确定联合查询。 这将如何实现?
【问题讨论】:
您能向我们展示您希望在其上进行联合的后端代码吗?并向我们展示您迄今为止尝试过的代码 @karthikr - 这是我的 models.py 文件的链接。请审查并提供必要的帮助。谢谢 :) [***.com/questions/17651815/… 【参考方案1】:我个人会说,如果这将是一个常见的查询,那么我会建议创建一个 SQL 视图然后进行查询。
w3schools 对什么是视图有一个非常简单的概述:http://www.w3schools.com/sql/sql_view.asp
在 SQL 中,视图是基于 SQL 语句结果集的虚拟表。
这意味着您可以编写所需的 sql 语句并使用它创建视图。然后创建一个镜像该视图的 django 模型,然后您可以使用该模型进行查询。
因此,您将创建一个 SQL 视图:
CREATE VIEW view_name AS
SELECT a, b, c
FROM table_name
WHERE condition
然后创建一个django模型,与普通模型略有不同:
class view_name(models.Model):
class Meta:
# https://docs.djangoproject.com/en/1.5/ref/models/options/#django.db.models.Options.managed
managed = False
a = models.CharField(max_length)
....
managed = false
> https://docs.djangoproject.com/en/1.5/ref/models/options/#django.db.models.Options.managed
然后你可以使用普通的 django orm 语法来查询这个
或者有类似的问题:
Previous *** question, union in django orm
How can I find the union of two Django querysets?
【讨论】:
我不明白。能否请您更具体一点。谢谢。 @user1162512 查看扩展答案【参考方案2】:How can I find the union of two Django querysets? 提供了一个使用“|”的联合示例操作员。我不确定你的模型有多么不同。如果有公共字段,您可以将它们放在单独的模型中并使用模型继承
【讨论】:
以上是关于Django 联合查询的主要内容,如果未能解决你的问题,请参考以下文章