从sqlite切换到Postgres,我在django中得到这个错误:
函数 sum(布尔值(不存在 第 1 行:..."."经度", "pins_pin"."category_id", COALESCE(SUM("pins_...
提示:没有函数与给定的名称和参数类型匹配。可能需要添加显式类型强制转换。
viewsets.py
:
class PinViewSet(viewsets.ModelViewSet):
queryset = pin.objects.annotate(
num_of_upvotes=Coalesce(Sum('upvoters__upvote'), Value(0))
)
...
models.py
:
class Pin(models.Model):
....
class UpvoteStory(models.Model):
pin = models.ForeignKey("pin", on_delete=models.CASCADE, null=True, related_name='upvoters')
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True)
upvote = models.BooleanField(default=False)
num_of_upvotes
应该计算每个引脚的赞成票数。
你可以用Sum
、Case
、When
来做到这一点,每次upvoters__upvote
True
pin.objects.annotate(
num_of_upvotes=Sum(Case(
When(upvoters__upvote=True, then=1),
default=Value(0),
output_field=IntegerField()
))
)
Postgres不支持SUM
布尔字段。 您可以使用Cast
将其转换为整数:
pin.objects.annotate(
num_of_upvotes=Sum(Cast(upvoters__upvote, output_field=IntegerField())),
)