我的模型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
但!我无法将此queryset
转换为list
complaints = list(complaints)
complaints.sort(key=lambda x: x.get_latest_response().date_response)
因为在那之后我在queryset
中呈现了这个object_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)
也不起作用
你可以给我任何建议吗?答案 0 :(得分:1)
您想要列出ResponseLetter.date_response所订购的投诉。但是order_by和distinct不是play well together。这是一个解决方法:
from django.db.models import Max
Complaint.objects.annotate(max=Max('responseletter__date_response')).order_by('-max')