Django集成含图片的试题数据库时字段缺失且表已存在报错如何解决
报错原因
你遇到的两个报错是关联问题:
- 你导入的原有试题数据库里的
questions表没有Django模型默认要求的id自增主键列,所以访问Admin查询数据时找不到字段报错 - 你将模型的
managed属性设为True,Django执行migrate时会尝试新建questions表,但表已经在数据库中存在,因此抛出重复创建的错误
解决步骤
1. 调整模型主键配置
Django默认会给未显式指定主键的模型自动添加id字段作为主键,你需要二选一处理:
- 如果原有
questions表有自定义主键字段,在模型对应字段上加primary_key=True参数,示例如下(假设原有表主键为main_ques,请替换为你实际的主键字段):
class Questions(models.Model): # 显式指定原有表的主键字段 main_ques = models.IntegerField(db_column='Main_ques', primary_key=True, blank=True, null=True) sub_ques = models.TextField(db_column='Sub_ques', blank=True, null=True) page_num = models.IntegerField(db_column='Page_num', blank=True, null=True) marks = models.IntegerField(blank=True, null=True) topic = models.TextField(db_column='Topic', blank=True, null=True) subques_images = models.ImageField(db_column='Subques_images', blank=True, null=True, upload_to='question_images') mainques_image = models.ImageField(blank=True, null=True, upload_to='question_images') class Meta: managed = False db_table = 'questions'
- 如果原有
questions表没有设置主键,手动执行SQL给表加id列:
ALTER TABLE questions ADD COLUMN id INTEGER PRIMARY KEY AUTOINCREMENT;
2. 处理迁移冲突
- 删除你现有的
0001_initial.py迁移文件 - 执行命令生成新的迁移文件:
python manage.py makemigrations - 执行带伪装参数的迁移命令,不会实际触发建表操作,仅标记迁移已完成:
python manage.py migrate --fake-initial
3. 验证
重启Django服务后再次访问Admin的试题页面即可正常加载。
内容的提问来源于stack exchange,提问作者Bivash Chakraborty
相关产品推荐
相关产品推荐

