【问题标题】:Join two records from same model in django queryset在 django 查询集中加入来自同一模型的两条记录
【发布时间】:2020-02-21 12:14:43
【问题描述】:

现在已经在网上搜索了几个小时以寻找解决方案,但没有什么完全符合我的要求。

我有一个模型(简化):

class SimpleModel(Model):
    name = CharField('Name', unique=True)
    date = DateField()
    amount = FloatField()

我有两个约会; date_onedate_two

我想要一个查询集,其中模型中的每个名称都有一行,每一行都显示:

{'name': name, 'date_one': date_one, 'date_two': date_two, 'amount_one': amount_one, 'amount_two': amount_two, 'change': amount_two - amount_one}

原因是我希望能够在单个查询集上使用排序或过滤器来找到 amount_oneamount_twochange 的排名。

我知道我可以从两个单独的查询集创建一个字典列表,然后对其进行排序并从索引值中获取排名...

但也许我觉得应该有一个使用更快的查询集的数据库解决方案。

union 看起来很有希望,但之后你不能执行一些简单的操作,比如filter

我想我也许可以将名称拆分为它自己的模型并生成带有相关字段的查询集,但我不想在这个阶段更改架构。另外,我只能访问 sqlite。

感谢任何帮助!

【问题讨论】:

    标签: django django-queryset


    【解决方案1】:

    您当前的模型强制您将 ONE 名称与 ONE 日期和 ONE 金额相关联。因为nameunique=True实际上不能有两个日期与同一个名称相关联

    因此,如果您希望能够将多个日期/金额与一个名称关联,有几种方法可以继续

    想法 1:如果只有 2 个日期和 2 个金额,只需添加第二个日期字段和第二个金额字段

    想法 2:如果天数和数量可以无限,您必须更改模型以反映它,方法是:

    • 你的名字的模型
    • 您的日期和金额的模型,您的姓名带有外键

    想法 3:您可以保持相同的模型并简单地删除 unique 约束,但这是错误的秘诀

    根据您的选择,您将有多种查询所需内容的方法。这取决于您的最终模型结构。最好的方法是创建自定义模型方法来查询 2 个日期/金额,格式化一个数组并返回它

    【讨论】:

      猜你喜欢
      • 2011-10-07
      • 2017-12-30
      • 2015-07-12
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多