调用Django User.history.all()报错:core_user表缺失FROM子句如何解决
错误原因
这个报错出现在使用django-simple-history跟踪自定义用户模型操作记录的场景,核心原因是历史表生成查询SQL时,尝试读取AbstractUser父类对应表core_user的字段,但生成的语句没有关联core_user表,只从历史表dib_page_historicaluser查询导致缺少表来源。
解决方案
按以下步骤排查修改即可解决:
- 检查自定义User模型的历史记录注册逻辑,不要修改
AbstractUser本身添加历史记录字段,仅在你继承AbstractUser的自定义User类中添加HistoricalRecords字段,同时开启inherit=True参数,让历史表自动包含所有父类的字段,无需关联父表查询:
from django.db import models from django.contrib.auth.models import AbstractUser from simple_history.models import HistoricalRecords class User(AbstractUser): # 你的自定义字段 editor_config = models.JSONField(default=dict) # 开启inherit参数继承父类所有字段到历史表 history = HistoricalRecords(inherit=True)
- 确认
settings.py中AUTH_USER_MODEL配置正确,指向你自定义的User模型,格式为AUTH_USER_MODEL = "你的应用名称.User",不要使用默认的auth.User或父类User路径。 - 如果你手动给
HistoricalRecords指定了table_name参数,确认参数值没有和其他表名冲突,不需要自定义表名可删除该参数,让框架自动生成历史表名。 - 清理已生成的错误迁移文件,重新生成迁移并执行:
- 删除对应应用下
migrations目录中所有和历史表相关的迁移文件,保留__init__.py - 执行命令
python manage.py makemigrations生成新迁移 - 执行命令
python manage.py migrate应用迁移
- 删除对应应用下
内容的提问来源于stack exchange,提问作者user466305
相关产品推荐
相关产品推荐

