函数 sum(布尔值)不存在



从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应该计算每个引脚的赞成票数。

你可以用SumCaseWhen来做到这一点,每次upvoters__upvoteTrue

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

最新更新