3

我有一个这样的模型:

模型.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”的行。

为此,我认为我有以下代码。

视图.py

qs = Talk_comment.objects.values('user').annotate(Max('id'))

现在在我的模板中,我想要以下内容: 如何得到这个?请帮忙

模板.html

{% for x in qs %}
    <li>
        {{ x.comment }} in talk {{ x.talk.title }}
    </li>
{% endfor %}
4

2 回答 2

3

我已经找到了解决方案,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)
于 2013-07-25T14:20:45.457 回答
0

您的 views.py 代码在这里有问题。它将仅返回带有注释的用户列的值,而不是返回允许您浏览 Talk_comment 和 Talk 之间关系的实际查询集。

我相信将该行更改为以下内容将使您更接近目标。

qs = Talk_comment.objects.annotate(max_id=Max('id')).order_by('-max_id')
于 2013-07-24T19:33:43.050 回答