Ich habe ein Django-Modell mit vielen Feldern. Sagen wir, das Modell ist wie folgt:Wie erhalte ich mithilfe von Django-Abfragen die Anzahl der einzelnen Werte aus verschiedenen Feldern?
class Foo(models.Model):
name = models.CharField(max_length=50)
type = models.CharField(max_length=100, blank=True)
foo_value = models.CharField(max_length=14, blank=True)
# ... and many many other fields
Jetzt muss ich eine Abfrage ausführen, mir alle Daten aus allen Bereichen zu erhalten. Das wäre Foo.objects.all()
, oder?
Jetzt brauche ich für jeden Namen (was bedeutet, dass ich nach Namen gruppieren werde), um einige Dinge zu tun. Erstens, das Problem ist, wenn ich nach Namen gruppieren möchte, würde ich dies tun: Foo.objects.values('name')
, richtig? Aber das bringt mir die 'Name' Feldwert nur für alle Datensätze. Ich brauche alle anderen Felder aber gruppiert von Name.
Die zweite wichtige Sache ist, ich brauche die Zählung eines jeden eindeutigen Wert in der ‚Typ‘ Feld sowie die Summe der ‚foo_value‘ Feld mit jedem verbunden bekommen ' Typ '. Ich brauche all dies zu einem Datensatz pro 'Name' in das zurückgegebene Ergebnis. Das Problem ist, wenn ich dies versucht: Foo.objects.values('name').annotate(c=Count('type'), s=Sum('foo_value'))
, es mir einen Datensatz für jeden bekommen (‚Namen‘, ‚Typen‘) Paar.
Was ich brauche, ist, dass, wenn ich Daten wie folgt aus:
Name Typ foo_value
x t1 5,5
x t1 10,0
x t2 20.0
y t2 15.23
y t1 17,0
Ich brauche das Ergebnis zu sein:
Name type_t1_count type_t1_sum type_t2_count type_t2_sum
x 15,5 20,0
y 17.0 15,23
Wie so etwas wie dies zu erreichen?
_I brauchen alle anderen Felder, aber gruppiert nach Name._ - Sie können andere Felder nicht erhalten, weil .. zum Beispiel haben Sie mehrere Modelle mit dem gleichen Namen, aber andere Felder sind unterschiedlich. Welches Modell von mehreren willst du bekommen? Scheint so, dass du 'order_by' brauchst, nicht gruppieren! – zvadym