我有2个问题。
首先,我的模型包含字段obj_id,text,creation_date。
在表格中,它看起来像:
obj_id text creation_date
1 '1' 01.01.2016
1 '2' 01.02.2016
2 '3' 01.03.2016
2 '4' 01.04.2016
我需要使用MAX'creative_date'返回'obj_id'的列表。
之后我需要执行SQL
select * from someModel where obj_id in (list)
如何使用最佳Django实践来实现它?
P.S。两个模型之间没有任何关系。
答案 0 :(得分:1)
尝试这样的事情:
someModelobject = someModel.objects.order_by('creation_date')
objList = []
for data in someModelobject:
objList.append(data.id)
感谢。
答案 1 :(得分:0)
这应该不是问题,您可以尝试使用obj_id查询集中的最大值来生成查询范围,然后从每个查询中获取最新日期:
from django.core.exceptions import ObjectDoesNotExist
result=[]
biggestID=someModel.objects.latest('obj_id')
#someModel.objects.all().aggregate(Max('obj_id'))
for i in range(biggestID.obj_id)
try:
val=someModel.objects.filter(obj_id=i).latest('creation_date')
except ObjectDoesNotExist:
val=None
if val is not None:
result.append(val)
您也可以尝试:
someModel.objects.values('obj_id').annotate(creation_date=Max('creation_date'))
我想指出这一点,你可能知道这一点,但如果你使用你的obj_id作为主键,这将无法工作,因为主键应该是唯一的。