3 Stimmen

Django Annotate mit select_related

Ich habe in meiner Anwendung ein Modell namens "Orders", das eine Fremdschlüsselbeziehung zu einem anderen Modell namens "Clients" hat, das Feld heißt "client".

Ich versuche, eine kommentierte Abfrage zu machen, um ein Feld in der Datenbank zu summieren, um herauszufinden, welcher Kunde am meisten gekauft hat, während auch die zugehörigen Daten aus der Tabelle "Kunden" enthalten sind. Hier ist, was ich bis jetzt herausgefunden habe:

top_clients = Order.objects.values('client_id').annotate(total_business=Sum('grand_total')).order_by('-total_business').select_related('client')

In meiner Vorlage kann ich problemlos auf die Variable "total_business" zugreifen, aber ich kann aus irgendeinem Grund nicht auf die zugehörigen "Client"-Daten zugreifen hier ist meine Schleife in der Vorlage;

 {% for c in top_clients %}
    <li>{{ c.total_business|currency }} {{ c.client.company_name }}</li>
    {% endfor %}

Haben Sie eine Idee, warum ich nicht auf die entsprechenden Daten zugreifen kann? Oder gibt es einen besseren Weg, um das zu tun, was ich versuche zu tun?

4voto

okm Punkte 23035

Sie fragen ab top_clients Daher ist es besser, mit Client :

top_clients = Client.objects.annotate(total_business=Sum('order__grand_total')).order_by('-total_business')

Dann in der Vorlage

{% for c in top_clients %}
<li>{{ c.total_business|currency }} {{ c.company_name }}</li>
{% endfor %}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X