Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django,如何使用';分组依据';和';最大值';获取queryset中的完整行并在模板中显示相关项_Django_Django Templates_Django Queryset - Fatal编程技术网

Django,如何使用';分组依据';和';最大值';获取queryset中的完整行并在模板中显示相关项

Django,如何使用';分组依据';和';最大值';获取queryset中的完整行并在模板中显示相关项,django,django-templates,django-queryset,Django,Django Templates,Django Queryset,我有一个这样的模型: 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_i

我有一个这样的模型:

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\u 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 %}
{%x在qs%}
  • {{x.comment}}在talk{{x.talk.title}中
  • {%endfor%}
    您的views.py代码在这里有问题。它将只返回带有注释的用户列的值,而不是返回一个实际的queryset,该queryset允许您遍历Talk_comment和Talk之间的关系

    我相信把这条线改成下面的会让你更接近你的目标

    qs = Talk_comment.objects.annotate(max_id=Max('id')).order_by('-max_id')
    

    我已经找到了解决方案,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)
    

    您已从qs中删除.values('user')。现在,查询将如何按“用户”分组?这是因为您正在注释中使用
    id
    ,并且可以使用
    id
    作为主键进行筛选。如果注释中有其他字段(非主键),该怎么办?在这种情况下,我们如何检索对象?