Django连接MySQL后无法获取User模型数据求助
以下是针对你遇到的User.objects.all()返回空QuerySet但数据库存在User数据的排查方向:
检查自定义User模型的全局配置
确保settings.py中正确设置了AUTH_USER_MODEL,指向你的自定义User模型,格式为'app_name.ModelName'。比如:AUTH_USER_MODEL = 'myapp.User'注意:该配置必须在首次执行
migrate前设置,若后期修改,需要手动处理数据库表的映射关系,否则Django会继续使用默认的auth_user表,而你的自定义模型会查询另一张表。验证模型与数据库表的映射
检查User模型的Meta类中db_table属性是否与数据库中实际存储User数据的表名一致。例如数据库表名为my_user,模型需配置:class User(models.Model): # 你的字段定义 class Meta: db_table = 'my_user'如果未设置
db_table,Django默认会生成appname_user格式的表名,确认数据库中是否存在该表且有数据。核对模型字段与数据库字段的一致性
确保模型中定义的字段名称、类型与数据库表中的字段完全匹配。例如数据库字段为username,模型中不能写成user_name;字段类型如CharField长度需与数据库中对应字段长度一致,否则ORM查询会无法正确映射数据。确认数据库连接的schema/库名正确性
检查settings.py的DATABASES配置,确保NAME指向的是存储User数据的数据库,若使用了MySQL的schema,需在OPTIONS中指定:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'correct_db_name', # 其他配置... 'OPTIONS': { 'init_command': "SET sql_mode='STRICT_TRANS_TABLES', use_unicode=True", }, } }刷新shell_plus的模型缓存
退出当前shell_plus会话,重新执行python manage.py shell_plus。shell_plus会缓存模型定义,若之前修改过模型但未重启会话,可能导致查询使用旧的模型配置。确认数据存储的表是否匹配
若之前使用过Django默认的User模型(django.contrib.auth.models.User),后来切换为自定义User模型,旧数据会存储在auth_user表中,而自定义模型会查询自己的表(如myapp_user),此时需要手动将auth_user的数据迁移到新表中。
内容的提问来源于stack exchange,提问作者ju so

