我有3个模型
class Car(models.Model):
owner = models.ForeignKey(Driver, on_delete=None)
car_type = models.CharField(max_length=3, choices=car_type_choices)
class Ride(models.Model):
pickup_time = models.IntegerField()
dropoff_time = models.IntegerField()
car = models.ForeignKey(Car, on_delete=models.CASCADE)
class Payment(models.Model):
ride = models.ForeignKey(Ride, on_delete=models.CASCADE)
amount = models.FloatField()
我必须编写一个具有3个条件的查询:
我编写查询,但遇到以下异常: django.core.exceptions.FieldError:表达式包含混合类型。您必须设置output_field。
当我评论第一条和第二条条件时,第三条也有效;当我只评论第三条第一条和第二条条件时,但同时全部无效。
q = Car.objects.annotate(
extras=Case(
When(car_type='A', then=Count('ride')),
When(car_type='B', then=Sum(F('ride__dropoff_time') - F('ride__pickup_time'), output_field=FloatField())),
When(car_type='C', then=Sum(F('ride__payment__amount'), output_field=FloatField()))
)
)
答案 0 :(得分:0)
您需要为所有情况提供output_field并将各个表达式包装在Value
内,如documentation中所述。因此查询将是:
from django.db.models import Value
q = Car.objects.annotate(
extras=Case(
When(car_type='A', then=Value(Count('ride'))),
When(car_type='B', then=Value(Sum(F('ride__dropoff_time') - F('ride__pickup_time'))),
When(car_type='C', then=Value(Sum(F('ride__payment__amount'))),
output_field=FloatField()
)
)