You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决Django中'int()基数10无效字面量'错误(目标值为字符串)

解决"invalid literal for int() with base 10"错误:外键过滤误用字符串而非对象

兄弟,这个错误的根源太明显了——你在Accelerator的avg_rating属性里,试图用self.name(字符串)去过滤Review模型的subject外键字段,但外键字段底层存储的是关联对象的整数ID,Django看到你传了个字符串,会自动尝试把它转成整数用来匹配ID,这就直接触发了ValueError。

修正后的代码

直接把过滤条件改成传入当前Accelerator实例就行,Django会自动处理ID匹配:

class Accelerator(models.Model):
    # ... 你的其他字段定义
    @property
    def avg_rating(self):
        # 替换subject=self.name为subject=self
        aggregate_result = Review.objects.filter(subject=self).aggregate(avg_rating=Avg('overall'))
        avg_rating = aggregate_result['avg_rating']
        # 先判断是否为None,再处理默认值
        return avg_rating if avg_rating is not None and avg_rating > 0 else 0

为什么之前的代码会报错?

Review模型里的subject是ForeignKey(Accelerator),这意味着它关联的是整个Accelerator对象,而不是对象的name字段。当你用subject=self.name时,Django会把这个字符串当作ID来解析,自然就会出现"无法把字符串转成整数"的错误。

额外提醒

如果你真的需要通过name字段来过滤(非常不推荐,因为名称可能重复),那得用双下划线的字段查找语法:

Review.objects.filter(subject__name=self.name)...

但显然直接用subject=self更高效、更准确,完全没必要绕远路。

内容的提问来源于stack exchange,提问作者samalty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:27:41