获取有关 .annotate() 数据 Django 的相关列
Get related column on .annotate() data Django
我创建了这组简单的数据来说明我的观点。这是一个简单的模型,与任何其他模型没有进一步的关系。
我需要按 topicid 对以上数据进行分组,找到每组的最大日期,然后获取该日期的作者。
info = TempModel.objects
.values('topic')
.annotate( max=Max('date'))
.order_by('-max')
在模板中迭代,
<table>
{% for item in info %}
<tr>
<td>{{ item.topicid }}</td>
<td>{{ item.max }}</td>
<td>{{ item.author }}</td>
</tr>
{% endfor %}
</table>
生产,
如何显示每个最大日期的 'author' 列?
我可以用这样的原始 sql 查询来做到这一点,
info = list(TempModel.objects
.raw('SELECT *, max(date) AS max
FROM crudapp_tempmodel
GROUP BY topicid
ORDER BY date DESC'))
但我想使用 Django 查询来完成。
我正在寻找的输出是,
如果 Django 查询无法做到这一点,我想知道。
谢谢,
一种解决方案是合并另一个查询,该查询将一个查询的日期与另一个查询的最大值进行比较。
这是执行此操作的视图,
def temp(request):
info2 = TempModel.objects.all()
info = TempModel.objects
.values('topic')
.annotate( max=Max('date'))
.order_by('-max')
columnlist = []
for item in info2:
columnlist.append([item])
for item in info:
for i in range(len(columnlist)):
if item['max'] == columnlist[i][0].date:
item['author'] = columnlist[i][0].author
return render(request, 'template.html', {'info': info, 'info2': info2})
我创建了这组简单的数据来说明我的观点。这是一个简单的模型,与任何其他模型没有进一步的关系。
我需要按 topicid 对以上数据进行分组,找到每组的最大日期,然后获取该日期的作者。
info = TempModel.objects
.values('topic')
.annotate( max=Max('date'))
.order_by('-max')
在模板中迭代,
<table>
{% for item in info %}
<tr>
<td>{{ item.topicid }}</td>
<td>{{ item.max }}</td>
<td>{{ item.author }}</td>
</tr>
{% endfor %}
</table>
生产,
如何显示每个最大日期的 'author' 列?
我可以用这样的原始 sql 查询来做到这一点,
info = list(TempModel.objects
.raw('SELECT *, max(date) AS max
FROM crudapp_tempmodel
GROUP BY topicid
ORDER BY date DESC'))
但我想使用 Django 查询来完成。
我正在寻找的输出是,
如果 Django 查询无法做到这一点,我想知道。
谢谢,
一种解决方案是合并另一个查询,该查询将一个查询的日期与另一个查询的最大值进行比较。
这是执行此操作的视图,
def temp(request):
info2 = TempModel.objects.all()
info = TempModel.objects
.values('topic')
.annotate( max=Max('date'))
.order_by('-max')
columnlist = []
for item in info2:
columnlist.append([item])
for item in info:
for i in range(len(columnlist)):
if item['max'] == columnlist[i][0].date:
item['author'] = columnlist[i][0].author
return render(request, 'template.html', {'info': info, 'info2': info2})