2016-12-26 64 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那一列:)