Соединение повторяющихся строк 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)

И, с этими данными:

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’ и колонка ‘conductor’ повторяются, присоединиться к соответствующей колонке ‘valor total viaje’. Результат, который я хочу, это:

 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()

2 ответа

  1. Этот запрос, кажется, делать то, что вы хотите:

    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}
    ]>
    

    Этот запрос, однако, игнорирует столбец «Total pasajeros», потому что в вашем примере вы произвольно выбрали значение 50 вместо 100 для строки с ruta=1, поэтому я предположил, что это не имеет значения. Если вы также хотите добавить значения «total_pasajeros», вы можете просто добавить еще одно .аннотировать() и суммировать этот столбец 🙂