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

しかし!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)

あまりにも動作しません

何かアドバイスをいただけますか?

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 に答える