float()参数必须是字符串或数字,而不是'NoneType'

时间:2019-09-28 05:20:06

标签: python django django-models

我想四舍五入一个浮点数,以得到2位数字。但是我收到错误:

  

float()参数必须是字符串或数字,而不是'NoneType'

class Story(models.Model):
    ...
    @property
    def average_rating(self):
        return round(float(self.rating_set.all().aggregate(Avg('rating'))['rating__avg']), 2)

class Rating(models.Model):
    rating = models.FloatField(validators=[MinValueValidator(0.0), MaxValueValidator(10.0)])
    story = models.ForeignKey(Story, on_delete=models.CASCADE)
    user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)

在“评分”模型的评分字段中进行舍入不是一个好主意,因为average_rating不会舍入

1 个答案:

答案 0 :(得分:1)

您正在像这样的对象上调用float

float({'rating__avg': 2.0})

而不是十进制值。

尝试将您的代码更改为此:

def average_rating(self):
    ratings = self.rating_set.all().aggregate(Avg('rating'))['rating__avg']
    if ratings is Not None:
        return round(float(ratings), 2)

    return None

此:

 model.objects.all().aggregate(...)

将返回{'ratings__avg',无}

如果来自model.objects.all()的查询为空。

我真的不确定为什么这会在您的代码中发生。