2016-12-26 30 views
0

我有以下型號:JOIN重複行Django的ORM蟒蛇

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) 

而且,用這樣的數據:

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 

我需要的,如果列「魯塔」和列「導體」是被重複,加入各自的列「勇敢的總體經濟」。我想結果是這樣的:

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

我曾嘗試:

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

和:

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

回答

0
cierre = Cierre.objects.distinct() 
0

該查詢似乎做你想要什麼:

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

它產生:

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

這個查詢確實,但是,忽略列「總pasajeros」,因爲在你的例子中,你任意選擇使用與魯塔= 1的行的值50,而不是100,所以我認爲這是無關緊要的。如果您還想要將「total_pasajeros」的值相加,則可以只添加另一個.annotate()和SUM那一列:)