Django迁移报错:‘id’字段默认值无效,未定义id字段
Django迁移报错:
Invalid default value for 'id' 解决方法 问题分析
你遇到的Invalid default value for 'id'错误,是因为Django默认会为每个模型自动生成名为id的自增主键字段,但数据库表结构或迁移文件出现异常,导致该字段的默认值设置不符合要求。你的字典里没定义id是正常的,因为这个字段由Django自动维护。
解决方案
清理并重新生成迁移文件
- 删除对应app下
migrations/目录中除__init__.py外的所有迁移文件 - 执行命令重新生成迁移:
python manage.py makemigrations - 再次执行迁移:
python manage.py migrate
- 删除对应app下
修复数据库表结构
如果数据库中已存在Product表,可能是之前手动修改过表结构导致id字段属性异常。直接删除该表后,重新执行迁移命令即可。显式定义主键字段
在Product模型中手动指定自增主键,避免Django自动生成时出现异常:from django.db import models class Product(models.Model): id = models.AutoField(primary_key=True) # 显式定义自增主键 code = models.SlugField(max_length=70, unique=True) designation = models.CharField(max_length=255) def __str__(self): return self.code # 修复原__str__方法错误,原代码中self.article不存在修正模型的
__str__方法
原代码中__str__方法调用了不存在的self.article.code,会导致对象保存后调用__str__时报错,需改为return self.code或return self.designation。
内容的提问来源于stack exchange,提问作者Khalifa
相关产品推荐
相关产品推荐

