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