在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日期的单行(如果日期相同,则选择多行)。

答案

首先我不理解您的QObj.objects.filter(id_number__in=latest_ids)为您提供其中id_numberlatest_ids之一的行。

以上是关于在Django Q对象中查找最新日期的主要内容,如果未能解决你的问题,请参考以下文章

Django/Python DRY:使用 Q 对象和模型属性时如何避免重复代码

Django - 从每个组的最新日期检索对象 - PersonPhoto

Django get_next_by_FIELD 使用复杂的 Q 查找

Django中Q搜索的简单应用

Django q 更新一个已经安排好的任务

Django Q AND 查找 - 在复杂查找中查询多个条目