我想四舍五入一个浮点数,以得到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不会舍入
答案 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()
的查询为空。
我真的不确定为什么这会在您的代码中发生。