我有一个这样的模型:
models.py
class Talk_comment(models.Model):
user = models.ForeignKey(User_info, null=True)
talk = models.ForeignKey(Talk)
comment = models.CharField(max_length=500)
class Talk(models.Model):
user = models.ForeignKey(User_info, null=True)
title = models.CharField(max_length=150)
slug = models.SlugField(max_length=50)
对于Talk_comment,我的数据库看起来像这样:
id | user_id | talk_id | comment
1 10 45 first comment
2 5 45 second comment
3 5 45 third comment
4 10 45 fourth comment
现在我想获得一个用户最大id的行(max'id',group by'user_id')。
在这种情况下,我想要ID为'3'和'4'的行。
为了得到这个,我在视图中有以下代码。
views.py
qs = Talk_comment.objects.values('user').annotate(Max('id'))
现在在我的模板中我想要以下内容: 如何获得?请帮助
template.html
{% for x in qs %}
<li>
{{ x.comment }} in talk {{ x.talk.title }}
</li>
{% endfor %}
答案 0 :(得分:2)
我找到了解决方案,views.py中的新查询集如下:
id_list = Talk_comment.objects.filter(user=user_info_obj).values('user','talk').annotate(Max('id')).values('id__max')
qs = Talk_comment.objects.filter(pk__in=id_list)
答案 1 :(得分:0)
你的views.py代码在这里有问题。它只返回带注释的用户列的值,而不是返回一个实际的查询集,它允许您遍历Talk_comment和Talk之间的关系。
我相信将该行更改为以下内容会让您更接近目标。
qs = Talk_comment.objects.annotate(max_id=Max('id')).order_by('-max_id')