当前位置: 首页 > 知识库问答 >
问题:

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

姚烨
2023-03-14

我想对一个浮点数进行四舍五入,得到点后的两位数。但我收到了一个错误:

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)

在评级模型的评级字段中四舍五入是一个坏主意,因为平均_评级不会四舍五入

共有1个答案

谷梁淇
2023-03-14

您正在对如下对象调用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,无}

如果查询结果来自模型。物体。all()为空。

我真的不知道为什么这会发生在你的代码中。

 类似资料:
  • 我知道很多人问过相关的问题,但请帮我解决。我试图复制一个我在网上找到的开源温度控制实验室。我想在树莓皮上运行它。这就是我一直遇到的错误: 生成它的代码如下所示: 我相信这段代码试图通过以下代码与另一个python文件通信: 我还不知道我周围的python代码,所以一个非常清晰的“虚拟类”解决方案的解释会很有帮助。谢谢伙计们。

  • 我试图从列列表中获取最大值,以及具有最大值的列的名称,如这些帖子中所述PySpark:计算列子集的行最大值并添加到现有的数据帧 中如何获取pyspark数据帧中具有最大值的列的名称我已经查看了许多帖子并尝试了许多选项,但尚未成功。 列对象不可调用TypeError:“列”对象不可调用,请使用SusCol列并传递多列Pyspark:在UDF中传递多列 加载到数据帧Rule_Total_Score的表

  • 我使用的是Python3.3,但在尝试pickle一个简单的字典时出现了一个隐秘的错误。 代码如下: 我得到:

  • 运行此代码时 我得到这个错误 read_bikeins=pdf。PdfFileReader(bikeins)回溯(最近一次呼叫最后一次): 文件“”,第1行,以read\u bikeins=pdf格式。PdfFileReader(比基恩) 文件“C:\Users\Naveen Raj\Anaconda3\lib\site packages\PyPDF2\pdf.py”,第1084行,在init s

  • 我已经使用stencil一段时间了,正在为它开发一个自定义的主题,我已经安装了nvm和Node5.0和NPM2。我也删除了stencil,并重新安装了所有的内容,包括节点模块和stencil init,但不管什么情况,当运行stencil start时,我仍然会出现下面的错误,我已经在谷歌上搜索了这个问题,但却是空的,所以我希望有人能帮我解决这个问题。提前道谢!