在 Django 查询集中加入来自同一模型的两条记录
Join two records from same model in django queryset
我在网上搜索了几个小时,现在正在寻找解决方案,但没有什么能完全符合我的要求。
我有一个型号(简体):
class SimpleModel(Model):
name = CharField('Name', unique=True)
date = DateField()
amount = FloatField()
我有两个约会; date_one
和 date_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_one
、amount_two
和 change
的排名。
我知道我可以从两个单独的查询集中创建一个字典列表,然后对其进行排序并从索引值中获取排名...
但也许我觉得应该有一个使用一个查询集的数据库解决方案会更快。
union
看起来很有希望,但是你不能在之后执行一些简单的操作,比如 filter
我想我也许可以将 name 拆分成它自己的模型并生成具有相关字段的查询集,但我不想在这个阶段更改架构。另外,我只能访问sqlite。
感谢任何帮助!
您当前的模型强制您将一个名称与一个日期和一个金额相关联。因为 name
是 unique=True
,你真的不能让两个日期与同一个名字相关联
因此,如果您希望能够有多个 dates/amounts 与一个名称相关联,有几种方法可以进行
想法1:如果只有2个日期和2个金额,只需添加第二个日期字段和第二个金额字段
想法 2: 如果可以有无限多的天数和数量,您将不得不更改模型以反映它,方法是:
- 你名字的模型
- 你的天数和金额的模型,带有你名字的外键
想法 3: 您可以保留相同的模型并简单地删除 unique
约束,但这是错误的秘诀
根据您的选择,您可以通过多种方式查询所需内容。这取决于您的最终模型结构。最好的方法是创建自定义模型方法来查询 2 dates/amount、格式化数组和 return it
我在网上搜索了几个小时,现在正在寻找解决方案,但没有什么能完全符合我的要求。
我有一个型号(简体):
class SimpleModel(Model):
name = CharField('Name', unique=True)
date = DateField()
amount = FloatField()
我有两个约会; date_one
和 date_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_one
、amount_two
和 change
的排名。
我知道我可以从两个单独的查询集中创建一个字典列表,然后对其进行排序并从索引值中获取排名...
但也许我觉得应该有一个使用一个查询集的数据库解决方案会更快。
union
看起来很有希望,但是你不能在之后执行一些简单的操作,比如 filter
我想我也许可以将 name 拆分成它自己的模型并生成具有相关字段的查询集,但我不想在这个阶段更改架构。另外,我只能访问sqlite。
感谢任何帮助!
您当前的模型强制您将一个名称与一个日期和一个金额相关联。因为 name
是 unique=True
,你真的不能让两个日期与同一个名字相关联
因此,如果您希望能够有多个 dates/amounts 与一个名称相关联,有几种方法可以进行
想法1:如果只有2个日期和2个金额,只需添加第二个日期字段和第二个金额字段
想法 2: 如果可以有无限多的天数和数量,您将不得不更改模型以反映它,方法是:
- 你名字的模型
- 你的天数和金额的模型,带有你名字的外键
想法 3: 您可以保留相同的模型并简单地删除 unique
约束,但这是错误的秘诀
根据您的选择,您可以通过多种方式查询所需内容。这取决于您的最终模型结构。最好的方法是创建自定义模型方法来查询 2 dates/amount、格式化数组和 return it