Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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
Python 如何将相关对象的最大值注释到Django查询集_Python_Django_Logic_Django Queryset - Fatal编程技术网

Python 如何将相关对象的最大值注释到Django查询集

Python 如何将相关对象的最大值注释到Django查询集,python,django,logic,django-queryset,Python,Django,Logic,Django Queryset,我有一个Django网站,在那里用户可以进行分组,然后在所述分组下撰写回复 简言之: class Group(models.Model): owner = models.ForeignKey(User) #some attributes class Reply(models.Model): text = models.TextField(validators=[MaxLengthValidator(500)]) writer = models.F

我有一个Django网站,在那里用户可以进行分组,然后在所述分组下撰写回复

简言之:

class Group(models.Model):
    owner = models.ForeignKey(User)        
    #some attributes

class Reply(models.Model):
    text = models.TextField(validators=[MaxLengthValidator(500)])
    writer = models.ForeignKey(User)
对于给定的用户,我希望找到她创建的或曾经回复过的所有组(即使是一次)。此外,我想从所有这些组中提取最新回复的ID——无论是由用户本人还是其他人做出的

为了实现上述目标,我尝试了:

groups = Group.objects.filter(Q(owner=self.request.user)|Q(reply__writer=self.request.user)).distinct()
ids = groups.annotate(max_reply=Max('reply__id')).values_list('max_reply', flat=True)
这不起作用-在
ids
中,我只得到由
self.request.user
自己编写的最新回复,而不是每个组下的绝对最新回复(由任何人编写)。我觉得这很奇怪,因为看起来,这应该行得通,不是吗?也许我没有正确地引用反向外键


你能帮我解决这个问题,或者建议一个替代方案吗?

以下是我目前如何完成的。我将所有相关组的ID分配给
。我在每个下找到max replies的ID,并将它们分配给
replies
。最后,我构建了一个大约60个这样的回复的查询集,将其分配给
回复

groups = Group.objects.filter(Q(owner=self.request.user)|Q(reply__writer=self.request.user)).distinct().values_list('id', flat=True)
replies = Reply.objects.filter(which_group__in=groups).values('which_group_id').annotate(Max('id')).values_list('id__max', flat=True)
replies_qs = Reply.objects.filter(id__in=replies)[:60]
这是3分贝访问,如果有人有建议,我更愿意用更少的时间