You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django报错:'User'类型对象不存在'objects'属性的技术问询

Django密码重置功能中User.objects报错的排查与解决

错误原因分析

出现AttributeError: type object 'User' has no attribute 'objects',核心是代码中使用的User类并非Django合法模型类,缺少模型默认的objects管理器,常见场景包括:

  • 导入错误:导入的User不是Django自带的用户模型,或是自定义的非模型类
  • 自定义User模型配置问题:若使用自定义用户模型,未正确继承django.db.models.Model(或AbstractUser/AbstractBaseUser),也未在settings.py中配置AUTH_USER_MODEL
  • 未遵循官方推荐的模型获取方式:硬编码导入django.contrib.auth.models.User,但项目实际使用了自定义用户模型,导致不匹配

解决方法

1. 修正User模型的导入逻辑

Django官方推荐用get_user_model()动态获取当前项目的用户模型,适配默认/自定义两种场景,修改你的views.py:

# 在views.py顶部添加
from django.contrib.auth import get_user_model

# 获取当前项目的用户模型
User = get_user_model()

如果确认使用Django默认用户模型,也可直接导入:

from django.contrib.auth.models import User

2. 检查自定义User模型(若有)

如果项目使用自定义用户模型,需确保:

  • 模型类继承正确的基类:
    from django.db import models
    from django.contrib.auth.models import AbstractUser
    
    class User(AbstractUser):
        # 自定义字段
        mobile = models.CharField(max_length=11, unique=True)
    
  • 在settings.py中指定用户模型:
    AUTH_USER_MODEL = 'your_app_name.User'
    

3. 附带修复:序列化器的语法错误

你的EmailSerializer中Meta类的field应为复数fields,否则配置不生效,修正如下:

class EmailSerializer(serializers.Serializer):
    email = serializers.EmailField()

    class Meta:
        fields = ("email",)  # 改为复数fields

内容的提问来源于stack exchange,提问作者Ali Mohammadnia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 00:52:48