1

我需要在 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"
        }]
    },

当只涉及一个模型时,我知道如何查询,但不确定联合查询。这将如何实现?

4

2 回答 2

0

我个人会说,如果这将是一个常见的查询,那么我会建议创建一个 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 语法查询它

或者有类似的问题:

上一个stackoverflow问题,django orm中的union

如何找到两个 Django 查询集的联合?

于 2013-07-15T12:11:59.530 回答
0

如何找到两个 Django 查询集的联合?提供了一个使用“|”的联合示例 操作员。我不确定你的模型有多不同。如果有公共字段,您可以将它们放在单独的模型中并使用模型继承

于 2017-07-13T22:42:43.770 回答