2016-12-26 1 views
0

Ich habe folgendes Modell:JOIN wiederholte Reihen django ORM Python

class Cierre(models.Model): 
    bus=models.ForeignKey(Bus) 
    ruta=models.ForeignKey(Ruta,editable=False) 
    conductor=models.ForeignKey(Conductor,editable=False)  
    total_pasajeros = models.IntegerField(editable=False) 
    total_viaje = models.FloatField(editable=False) 

Und mit dieser Daten:

Ruta Bus  conductor Total pasajeros Valor total viaje 
1  qwe789 1111111  50    107500.0 
1  qwe789 1111111  100    215000.0 
2  qwe789 1111111  50    102500.0 

ich brauche, wenn die Spalte 'Ruta' und Spalte 'Leiter' gewesen ist wiederholen, um der entsprechenden Spalte "valor total viaje" beizutreten. Das Ergebnis, das ich will, ist dies:

Ruta Bus  conductor Total pasajeros Valor total viaje 
    1  qwe789 1111111  50   322500.0  
    2  qwe789 1111111  50   102500.0 

ich versucht habe:

cierre = Cierre.objects.annotate(sales=Sum('ruta')) 

Und:

cierre = Cierre.objects.annotate(
      count_ruta = Count('ruta') 
     ).order_by(
      'ruta' 
     ).filter(
      count_ruta__gt=1 
     ).distinct() 

Antwort

0
cierre = Cierre.objects.distinct() 
0

Diese Abfrage scheint zu tun, was Sie wollen:

Cierre.objects.values("ruta", "bus").annotate(total_viaje = Sum("total_viaje")) 

Es ergibt:

<QuerySet [ 
    {'bus': u'qwe789', 'ruta': 1L, 'total_viaje': 322500.0}, 
    {'bus': u'qwe789', 'ruta': 2L, 'total_viaje': 102500.0} 
]> 

Diese Abfrage hat jedoch die Spalte „Total pasajeros“ ignorieren, weil in Ihrem Beispiel mit Ruta = 1, Sie gewählt haben, willkürlich den Wert 50 statt 100 für die Zeile zu verwenden, so Ich nahm an, dass es irrelevant war. Wenn Sie auch die Werte von "total_pasajeros" addieren möchten, können Sie einfach eine weitere .annotate() und SUM auch diese Spalte hinzufügen :)