Django执行makemigrations未为authorization应用生成迁移文件问题
问题原因及解决方案
核心原因
你在执行初始迁移之后才配置自定义用户模型,Django的初始迁移会基于默认的auth.User模型生成数据库表,后续修改AUTH_USER_MODEL不会触发新的迁移——因为Django认为auth相关的迁移已经完成,不会主动检测到用户模型的替换。
解决方案(适合新项目,无重要数据)
因为你是新项目,直接重置迁移和数据库即可:
- 删除项目根目录下的数据库文件(默认是
db.sqlite3) - 进入每个应用的
migrations文件夹,删除除了__init__.py之外的所有.py和.pyc文件(包括authorization、auth、admin等默认应用的迁移文件) - 重新生成迁移:
python3 manage.py makemigrations authorization - 执行迁移:
python3 manage.py migrate
额外注意:你的用户模型存在bug
deletedAt字段定义为BooleanField,但soft_delete方法里却赋值为timezone.now()(时间类型),这会导致运行时错误。建议修改为:
# 将原deletedAt字段改为DateTimeField deletedAt = models.DateTimeField(null=True, blank=True, default=None) def soft_delete(self): self.deletedAt = timezone.now() self.save() # 别忘了添加save()方法,否则不会保存到数据库
内容的提问来源于stack exchange,提问作者ILIKETOLEARN
相关产品推荐
相关产品推荐

