Python 在Django Q对象中查找最新日期

Python 在Django Q对象中查找最新日期,python,django,date,Python,Django,Date,对这段代码的结构不是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='19

对这段代码的结构不是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\u编号的行,
latest\u id

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\u number=id\u num
的行,并且日期
修改的
是最新的。我见过一些解决方案,比如使用Django的
aggregate()
函数或
latest()
函数,但我不知道如何将它们用于
Q
对象。我希望有一个
Q
对象,比如

Q(id_number=id_num, Max('modified'))
Django中的
Q
对象是否可能出现这种行为

编辑 我正在使用的系统使用SQLite。数据库很大,过去遇到的问题是SQL变量太多(SQLite只允许1000个),对于选择了许多id编号的查询,将查询分成更小的
Q
对象组解决了这些问题


数据库具有许多不同的
id\u编号
s,但许多行具有相同的
id\u编号
s。我希望能够为
latest\u id
s中的每一行选择与
id\u编号
匹配且具有最新
修改日期的单行(如果日期相同,则为多行)。

首先我不理解您的
Q
Obj.objects.filter(id\u number\u in=latest\u id)
提供
id\u number
最新\u id之一的行

编辑:似乎您需要为您的用例保留Q()查询。在这种情况下,无法在Q()过滤器中添加所需内容

但是对结果查询进行分组和注释可能不是这样的问题。试试这个:

Obj.objects.filter(reduce(operator.or_, split_queries))\
    .values('id_number').annotate(latest_modified=Max('modified'))

但是这里有多个
id\u编号
s?是的,有多个
id\u编号
s。许多行具有相同的
id\u编号
,对于每组,我只想在
修改的
中选择最新日期的行。但是,
最新id
列表中的每个
id\u编号
都是唯一的。编辑了为什么选择
Q
对象而不是标准的
filter()
的问题,但这并没有改变您可以按修改日期排序以获取最后一个对象的事实。或在末尾聚合以获取最大值。在Q过滤器中不能这样做,因为它会过滤每一行(逐行),而最新的日期是一个聚合。如果在调用
filter(reduce…
之后调用
order\u by('modified')
,则
QuerySet
将包含许多
id\u编号,我相信
last()
将忽略每个
id\u编号
,只关注
修改的日期。我想为每个
id\u编号
保留一行,这是我不理解的最新
修改日期的行。你应该在你的问题中澄清这一点。每个id_编号一行是什么意思?你的意思是有多行具有相同的id_编号?是的,我编辑了这个问题,希望增加数据库包含的内容以及我希望实现的内容的清晰度