2017-05-19 1 views
0

Mein Modell sieht so aus: Jedes Bottle hat ein Attribut name und eine Beziehung zu Brand.django: Filterung mit mehreren Kriterien, ohne andere Felder zu verlieren?

In einer meiner Ansichten möchte ich einem Benutzer alle eindeutigen Flaschen und ihre Zählungen zeigen.

Eine eindeutige Flasche ist eine Flasche, die das gleiche name Attribut und die gleiche Brand Beziehung hat.

So diese Tabelle: enter image description here

2 Zeilen anstelle von 3 angezeigt werden soll, mit den richtigen Mengen (1 für Eitan, 2 für Almon).

Die folgende Zeile in meinem views.py:

object = Bottle.objects.filter(brand__business__owner_id=user.id).all().values('name').annotate(Count('brand')) 

Erzeugt das, wenn ich drucken object:

<QuerySet [{'name': 'Almon', 'brand__count': 2}, {'name': 'Eitan', 'brand__count': 1}]> 

Welche die richtige Richtung zu sein scheint, aber es hat zwei Probleme:

  1. Ich verliere al l andere Felder (vintage, capacity) außer name und brand__count. Ich kann sie natürlich explizit zu Werten hinzufügen, aber das scheint a) upythonisch b) dass es sich auch um diese Elemente gruppieren wird!

  2. Mein Pug-Template klagt: Benötige 2 Werte zum Auspacken in for-Schleife; 1 erhalten (weil ich sie als Liste durchlaufen habe und den Index für die Nummerierung verwende)

Jede Hilfe wird geschätzt!

Antwort

1
object = Bottle.objects.filter(brand__business__owner_id=user.id).all().values('name','vintage','capacity').annotate(Count('brand')) 

Wenn Sie nicht die Felder angeben, die gefiltert werden sollen, wenn Sie Namen angeben, wie wird dann die Abfrage an Sie übergeben? dann dies zu tun, wie keine Namen in den Werten

object = Bottle.objects.filter(brand__business__owner_id=user.id).all().values().annotate(Count('brand')) 

beide dieses erwähnen geben Ihnen alle Felder in Flaschen Tabelle

+0

Also, wo ist diese Gruppierung durch die Namen der Flasche und seine Marke? – zerohedge

+0

überprüfen Sie die beiden Sie verstehen werden. Probieren Sie es zuerst aus – Exprator

+0

OK sie beide ausgeben alle Felder außer dem 'brand__name', der der Markenname der Flasche ist. So wie ich es verstehe und bevor ich deine Antwort als die richtige überprüfe: Muss ich die Felder explizit aufrufen, wenn ich ein Related-Entity-Attribut haben möchte? – zerohedge