如何在Django 1.9中使用包含动态字段的模型运行原始查询?

时间:2016-07-24 04:31:38

标签: django postgresql django-models

我有一个复杂的结果,需要编写原始的SQL查询。

请参阅https://stackoverflow.com/a/38548462/80353

预期结果是一个显示多个列的表。

第一个列标题只是Product,其他列标题是商店名称。

这些值只是产品名称和这些商店中产品的汇总销售值。

将展示哪些商店完全是动态的。最多应该是9家商店。

enter image description here

文本格式相同:

存储表

------------------------------
| id  | code | address       |
|-----|------|---------------|
| 1   | S1   | Kings Row     |
| 2   | S2   | Queens Street |
| 3   | S3   | Jacks Place   |
| 4   | S4   | Diamonds Alley|
| 5   | S5   | Hearts Road   |
------------------------------

产品表

------------------------------
| id  | code | name          |
|-----|------|---------------|
| 1   | P1   | Saucer 12     |
| 2   | P2   | Plate 15      |
| 3   | P3   | Saucer 13     |
| 4   | P4   | Saucer 14     |
| 5   | P5   | Plate 16      |
|  and many more ....        |
|1000 |P1000 | Bowl 25       |
|----------------------------|

销售表

----------------------------------------
| id  | product_id | store_id | amount |
|-----|------------|----------|--------|
| 1   | 1          | 1        |7.05    |
| 2   | 1          | 2        |9.00    |
| 3   | 2          | 3        |1.00    |
| 4   | 2          | 3        |1.00    |
| 5   | 2          | 5        |1.00    |
|  and many more ....                  |
| 1000| 20         | 4        |1.00    |
|--------------------------------------|

关系是:

  1. 销售属于商店
  2. 销售属于产品
  3. 商店有很多销售
  4. 产品有很多销售
  5. 我想要实现的目标

    我希望以下列方式通过分页显示:

    鉴于商店S1-S3:

    -------------------------
    | product | S1 | S2 | S3 |
    |---------|----|----|----|
    |Saucer 12|7.05|9   | 0  |
    |Plate 15 |0   |0   | 2  |
    |  and many more ....    |
    |------------------------|
    

    有关架构的更多详细信息,请查看How to get back aggregate values across 2 dimensions using Python Cubes?

    中的问题

    我的问题

    架构对我的问题并不是非常重要的:

    由于我要编写一个复杂的原始查询,有没有办法将查询结果映射到字段是动态的模型?

    我找到了有关如何在Django中执行原始查询的文档,以及如何使用固定字段和匹配表对现有模型执行原始查询。

    我的问题是,对于没有匹配表和动态字段的模型,可以这样做吗?

    若然,怎么样?

    或者如果我选择在postgresql中使用物化视图,我该如何将它与模型类匹配?

0 个答案:

没有答案