在Django Q对象中查找最新日期
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Django Q对象中查找最新日期相关的知识,希望对你有一定的参考价值。
对此代码的结构不是100%满意,但是很遗憾,目前我无法更改它。我正在Django中搜索大型数据库,并且由于技术限制,我必须存储Q
对象的列表,并使用Django的reduce()
函数将Q
对象合并为单个Queryset
。我目前有一个这样的模型:
class Obj(models.Model):
id_number = models.CharField(max_length=128)
modified = models.DateField('%Y-%m-%d', default='1900-01-01')
我当前正在使用以下代码来选择在列表id_number
中具有latest_ids
的行:
split_queries = []
for id_num in latest_ids:
split_queries.append(Q(id_number=id_num))
result = Obj.objects.filter(reduce(operator.or_, split_queries))
这按预期工作,但我只想保留id_number=id_num
和日期modified
为最新的行。我已经看到了诸如使用Django的aggregate()
函数或latest()
函数的解决方案,但是我不知道如何在Q
对象中使用它们。我希望有一个Q
对象,例如
Q(id_number=id_num, Max('modified'))
Django中的Q
对象是否可能发生这种行为?
编辑我正在使用的系统使用SQLite。数据库很大,过去使用Too Many SQL variables
遇到问题(SQLite仅允许使用1000),对于选择了许多id_number
的查询,将查询分成较小的Q
对象组即可解决这些问题。
数据库具有许多不同的id_number
,但是许多行具有相同的id_number
。我希望能够为latest_id
中的每一个选择与id_number
匹配且具有最新modified
日期的单行(如果日期相同,则选择多行)。
首先我不理解您的Q
。 Obj.objects.filter(id_number__in=latest_ids)
为您提供其中id_number
是latest_ids
之一的行。
以上是关于在Django Q对象中查找最新日期的主要内容,如果未能解决你的问题,请参考以下文章
Django/Python DRY:使用 Q 对象和模型属性时如何避免重复代码
Django - 从每个组的最新日期检索对象 - PersonPhoto