连接重复的行Django ORM python

2024-06-25 23:47:18 发布

您现在位置: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()

Tags: falsemodelsvalortotalbusforeignkeyeditableconductor
2条回答
cierre = Cierre.objects.distinct()

此查询似乎满足您的要求:

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”列,因为在您的示例中,您任意选择对ruta=1的行使用值50而不是100,所以我认为这是不相关的。如果您还想将“total\u pasajeros”的值相加,只需添加另一个.annotate()并对该列求和:)

相关问题 更多 >