Django主键(id)自动插入失效为null的问题求助
Django主键id自动插入失败问题解决
可能原因及对应方案
1. 未执行保存操作
你在shell中仅实例化了对象,但没有调用save()方法将其写入数据库,此时对象只存在于内存中,并未生成数据库记录,因此id会显示为null。修正方式:
test = Camera(status=False,location='b1',liveURL='http://test.com') test.save() # 执行此步骤将对象存入数据库 print(test.id) # 此时可查看自动生成的id值
2. 数据库表结构未正确配置自增主键
若删除旧迁移文件和记录后未完整重建数据库,可能导致id字段未被设置为自增主键。按以下步骤重新初始化:
- 删除对应app下
migrations文件夹中除__init__.py外的所有文件 - 删除项目根目录的数据库文件(如
db.sqlite3) - 依次执行命令:
python manage.py makemigrations python manage.py migrate
3. 显式指定主键字段
若默认配置未生效,可在模型中直接定义自增主键:
class Camera(models.Model): id = models.AutoField(primary_key=True) # 显式声明自增主键 status = models.BooleanField(default=True) location = models.CharField(max_length=2) liveURL = models.URLField(max_length=200)
添加后重新执行makemigrations和migrate命令。
内容的提问来源于stack exchange,提问作者Stanley Lim
相关产品推荐
相关产品推荐

