1

我有一个Complaint带有get_latest_response方法的模型

class Complaint(models.Model):
    message         = models.TextField(blank=True)
    email           = models.CharField(max_length=255)

    def get_latest_response(self):
        return ResponseLetter.objects.filter(complaint=self)[:1][0]

方法get_latest_response返回对此投诉的最新回复

ResponseLetter模型

class ResponseLetter(models.Model): 
    date_response       = models.DateField(db_index=True)
    response_content    = models.TextField()
    response_from       = models.CharField(max_length=255)

    complaint           = models.ForeignKey(Complaint)

    class Meta:
        ordering = ["-date_response"]

然后在view我收到投诉(queryset

complaints = Complaint.objects.all()

我必须订购complaints这些 get_latest_response().date_response

但!我无法将其转换querysetlist喜欢

complaints = list(complaints)
complaints.sort(key=lambda x: x.get_latest_response().date_response)

因为在那之后我把它呈现querysetobject_list

return object_list(request, template_name = 'complaint/complaints.html',
        queryset = complaints, paginate_by = COMPLAINTS_PAGE_SIZE,
        extra_context=extra_context
    )

还有方法:

sorted(complaints, key=lambda a: a.get_latest_response().date_response)

也不行

你能给我什么建议吗?

4

1 回答 1

1

您想列出由 ResponseLetter.date_response 排序的投诉。但是 order_by 和 distinct 不能很好地结合在一起。这是一个解决方法:

from django.db.models import Max

Complaint.objects.annotate(max=Max('responseletter__date_response')).order_by('-max')

测试/工作

于 2012-11-21T13:54:47.597 回答