在 Django 查询集中加入来自同一模型的两条记录

Join two records from same model in django queryset

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

我有一个型号(简体):

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

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

感谢任何帮助!

您当前的模型强制您将一个名称与一个日期和一个金额相关联。因为 nameunique=True你真的不能让两个日期与同一个名字相关联

因此,如果您希望能够有多个 dates/amounts 与一个名称相关联,有几种方法可以进行

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

想法 2: 如果可以有无限多的天数和数量,您将不得不更改模型以反映它,方法是:

  • 你名字的模型
  • 你的天数和金额的模型,带有你名字的外键

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

根据您的选择,您可以通过多种方式查询所需内容。这取决于您的最终模型结构。最好的方法是创建自定义模型方法来查询 2 dates/amount、格式化数组和 return it