【发布时间】:2019-12-29 04:39:52
【问题描述】:
从 sqlite 切换到 postgres,我在 django 中遇到此错误
函数 sum(boolean) 不存在 第 1 行:..."."longitude", "pins_pin"."category_id", COALESCE(SUM("pins_...
提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。
视图集
class PinViewSet(viewsets.ModelViewSet):
queryset = pin.objects.annotate(
numOfUpvotes=Coalesce(Sum('upvoters__upvote'), Value(0))
)
permission_classes = [
permissions.AllowAny
# permissions.IsAuthenticated,
]
serializer_class = PinSerializer
filter_backends = [DjangoFilterBackend]
filterset_fields = '__all__'
序列化器
class PinSerializer(serializers.ModelSerializer):
username = serializers.CharField(
source="owner.username", read_only=True)
numOfUpvotes = serializers.IntegerField(read_only=True)
upvoters = upVoteStorySerializer(many=True, read_only=True)
commentstory =
class Meta:
model = pin
fields = '__all__'
class upVoteStorySerializer(DynamicFieldsMixin, serializers.ModelSerializer):
class Meta:
model = upVoteStory
fields = '__all__'
型号
class pin(models.Model):
owner = models.ForeignKey(settings.AUTH_USER_MODEL,
null=True, on_delete=models.CASCADE)
title = models.CharField(max_length=50)
description = models.TextField()
latitude = models.CharField(max_length=50)
longitude = models.CharField(max_length=50)
category = models.ForeignKey(
"categoryType", on_delete=models.CASCADE, null=True, related_name='selected_category')
# 1 is community, 2: historical, 3: personal
#upVotes = models.PositiveSmallIntegerField(default=0)
def __str__(self):
"""String for representing the Model object."""
return self.title
class upVoteStory(models.Model):
pinId = models.ForeignKey(
"pin", on_delete=models.CASCADE, null=True, related_name='upvoters')
upVoter = models.ForeignKey(
settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True)
upvote = models.BooleanField(default=False)
numOfUpvotes 从 upvotestory 为每个 pin 计算 upvotes = true。将引脚添加到数据库时最初设置为 0。使用 sqlite 时,它可以工作,但是当我尝试迁移到 postgres 时,我会收到此错误。我尝试清除数据库和迁移并再次重做整个过程,python manage.py makemigrations 和 python manage.py migrate 但仍然会得到相同的错误
【问题讨论】:
标签: django postgresql