Django+SQLite迁移时遇fromisoformat错误及模型不存在问题求助
Django migrate报错:TypeError: fromisoformat: argument must be str 及模型不存在问题解决
问题背景
使用Django + SQLite开发网站,通过Model实现数据库与前端数据交互,执行python3 manage.py migrate时出现以下错误:
TypeError: fromisoformat: argument must be str
经排查怀疑是日期类型模型使用不当,将datetime.date对象传入了需要字符串的fromisoformat()方法。尝试将DateField替换为CharField后,又出现模型不存在的报错,寻求解决办法。
当前Model代码
# Internal = 0, Derived = 1. class Grade(models.Model): name = models.CharField(max_length=100, default="null") # classPage = models.ManyToManyField(classPage, related_name="_set") amegrade = models.CharField(max_length=10, default="null") description = models.CharField(max_length=500, default="null") type = models.BooleanField(default=1) class Student(models.Model): studentName = models.CharField(max_length=50, default="null") age = models.CharField(default="13", max_length=3) house = models.CharField(max_length=10, default="null") bday = models.CharField(default="null", max_length=50) class classPage(models.Model): teacher = models.CharField(max_length=50, default="null") # classStudents = models.ManyToManyField(Student, related_name="_set") class timetableItem(models.Model): name = models.CharField(max_length=50, default="null") timeStart = models.CharField(max_length=50, default="null") timeEnd = models.CharField(max_length=50, default="null") class dailyTimetable(models.Model): timetableItems = models.ManyToManyField(to=timetableItem) class weeklyTimetable(models.Model): monday = models.OneToOneField(to=dailyTimetable, on_delete=models.CASCADE) class sideViewButton(models.Model): name = models.CharField(max_length=100, default="null") directory = models.URLField(max_length=100, default="null") class Notice(models.Model): title = models.CharField(max_length=50, default="null") description = models.CharField(max_length=10000, default="null")
解决步骤
一、处理fromisoformat类型错误
- 检查旧迁移文件:查看项目
migrations目录下的所有文件,是否存在残留的日期字段(DateField/DateTimeField)操作逻辑。即使当前模型已经修改,旧迁移可能仍在执行日期对象转字符串的操作,导致报错。 - 检查数据赋值逻辑:排查项目中视图、序列化器、信号等所有给模型字段赋值的代码,确认是否有直接传入
datetime.date对象的情况。即使字段改为CharField,若赋值时未将日期对象转为ISO格式字符串(比如date_obj.isoformat()),仍会触发该错误。
二、处理“模型不存在”错误
- 修正模型类命名:Django模型类规范采用大驼峰命名(如
ClassPage而非classPage),检查是否因类名大小写不一致导致迁移文件无法找到模型。建议统一修改为大驼峰命名,重新生成迁移。 - 清理注释字段的残留迁移:若之前已为注释掉的字段(如
Grade中的classPage多对多字段)生成过迁移,注释字段后未清理对应迁移逻辑,会导致migrate时找不到关联模型。可删除包含该字段的旧迁移文件,重新生成迁移。 - 检查迁移依赖:查看
migrations/__init__.py及各迁移文件的dependencies,确认所有依赖的模型均存在,无引用已删除或重命名的模型。 - 开发环境重置迁移(谨慎操作):若为开发环境,可执行以下步骤彻底重置:
- 删除
migrations目录下除__init__.py外的所有文件; - 删除SQLite数据库文件(默认是
db.sqlite3); - 重新执行
python3 manage.py makemigrations生成新迁移; - 执行
python3 manage.py migrate完成数据库同步。
- 删除
内容的提问来源于stack exchange,提问作者TechGrey
相关产品推荐
相关产品推荐

