Django模型报错:TypeError: Field 'last_boundary'期望数值却得到IntegerField
错误排查与解决方法
错误原因
出现TypeError: Field 'last_boundary' expected a number but got <django.db.models.fields.IntegerField>的核心原因是:你在给last_boundary字段赋值时,传入了IntegerField字段对象,而非具体的整数值。比如在创建/更新Quiz_Model实例时,错误地写了类似last_boundary=models.IntegerField(default=1)的代码,把字段类本身当作值传入,导致类型不匹配。
模型代码中的潜在问题
除了上述直接原因,你的模型代码还有两处需要修正的问题:
- user字段default设置错误:外键字段存储的是关联用户的ID(整数类型),但你设置了
default=''(空字符串),这会导致类型不兼容,可能间接引发其他字段的异常。 - save方法逻辑瑕疵:
if not self.last_boundary:会把last_boundary=0的情况判定为False,进而覆盖为max_test_number的值。如果业务逻辑允许last_boundary为0,这个判断逻辑不符合预期。
解决步骤
- 修正赋值错误:检查所有创建/更新
Quiz_Model实例的代码,确保给last_boundary传递的是具体整数(如0、1、50等),绝对不能传入models.IntegerField()这类字段对象。 - 修复user字段配置:
- 如果允许用户字段为空,修改为:
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, default=None) - 如果必须关联用户,设置default为有效用户ID(比如超级用户ID通常为1):
user = models.ForeignKey(User, on_delete=models.CASCADE, default=1)
- 如果允许用户字段为空,修改为:
- 调整save方法逻辑(可选):如果业务允许
last_boundary为0,将判断条件改为检查字段是否为None:
(Python3中调用def save(self, *args, **kwargs): if self.last_boundary is None: self.last_boundary = self.max_test_number self.slug = slugify(self.quiz_name) super().save(*args, **kwargs)super()无需显式传入类名和self,写法更简洁)
内容的提问来源于stack exchange,提问作者user22236133
相关产品推荐
相关产品推荐

