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

Django PostgreSQL模型迁移报integer类型输入语法错误如何解决

错误原因
  • 模型层面存在属性调用错误:Person模型仅定义了name字段,但其__str__方法返回不存在的fullname属性,Enrollment的__str__方法也调用了这个不存在的属性,会引发运行时错误。
  • 终端抛出的django.db.utils.DataError: invalid input syntax for type integer: "Build"错误,本质是PostgreSQL尝试向整数类型字段(此处为外键关联的主键ID字段)插入字符串值"Build",常见触发场景有两个:
    1. 已生成的迁移文件中,外键字段(person/job)被设置了字符串类型的错误默认值
    2. 数据库中已存在旧表数据,原关联字段为字符类型,调整为外键关联整数ID后旧数据不兼容
修复步骤

1. 修正模型代码

将不存在的属性调用替换为已定义的字段,修正后代码如下:

class Person(models.Model): 
     name = models.CharField(max_length=50, null=True)
     def __str__(self):
         return self.name if self.name else ""

class Features(models.Model):
    name = models.CharField(max_length=30, null=True)
    feature = models.ManyToManyField(Person, through='Enrollment')
    def __str__(self):
       return self.name if self.name else ""

class Enrollment(models.Model):
     person = models.ForeignKey(Person, on_delete=models.CASCADE, null=True)
     job = models.ForeignKey(Features, on_delete=models.CASCADE, null=True)    
     def __str__(self):
         return self.person.name if self.person and self.person.name else ""

2. 清理错误迁移和数据

根据你的数据保存需求选择对应方案:

  • 开发环境无重要数据:删除对应app下migrations目录中除__init__.py外的所有文件,连接PostgreSQL删除该app对应的所有表,重新执行python manage.py makemigrations和python manage.py migrate即可。
  • 有存量数据不可删除:找到最新生成的迁移文件,检查外键字段的默认值配置,删除字符串类型的错误默认值,或替换为合法的整数ID;清理数据库旧表中不符合外键整数类型的异常数据后,再重新执行迁移。

3. 验证配置

迁移完成后可执行python manage.py shell创建测试实例,确认模型调用和数据写入无异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:54:09