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

Django自定义用户模型ORM无法获取全部字段问题求助

问题分析与解决

你看到的<TblUsuarios: juan@juan.com>只是Django模型实例的字符串展示形式,并非查询仅返回了email字段。实际上TblUsers.objects.get()或all()返回的是完整的模型实例,所有字段数据都存在,只是默认的__str__方法用USERNAME_FIELD(即你设置的email)作为显示内容。

验证方法

执行以下代码,直接访问实例的其他字段,就能获取对应数据:

user = TblUsers.objects.get(id=request.user.id)
# 打印其他字段值
print(user.phone)
print(user.date_joined)
print(user.photo.url)

自定义实例显示内容

如果想让打印实例时显示更多字段,可以重写模型的__str__方法:

class TblUsers(AbstractUser):
    email = models.EmailField("email address", unique=True)
    is_staff = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    date_joined = models.DateTimeField(default=timezone.now)
    phone= models.CharField(max_length=11, blank=True, null=True)
    photo= models.ImageField(upload_to=upload_image, default = '/')

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS=(['username'])
    objects = UserManager()
    
    # 重写__str__方法
    def __str__(self):
        return f"{self.email} | 用户名: {self.username} | 手机号: {self.phone or '未设置'}"

    class Meta:
        managed=True
        db_table = 'tbl_users'

这样之后,打印TblUsers实例时就会显示你定义的多字段内容。

额外提示

你的自定义管理器类名和继承的UserManager重名了,虽然当前不影响功能,但建议改名为CustomUserManager避免混淆:

class CustomUserManager(UserManager):
    # 原有代码不变
    def create_user(self, email, password, **extra_fields):
        if not email:
            raise ValueError(_("The email must have info"))
        email = self.normalize_email(email)
        user = self.model(email=email, **extra_fields)
        user.set_password(password)
        user.save()
        return user

    def create_superuser(self, email, password, **extra_fields):
        extra_fields.setdefault("is_staff", True)
        extra_fields.setdefault("is_superuser", True)
        extra_fields.setdefault("is_active", True)

        if extra_fields.get("is_staff") is not True:
            raise ValueError(_("The superuser should have is_staff=True."))
        if extra_fields.get("is_superuser") is not True:
            raise ValueError(_("The superuser should have is_superuser=True."))
        return self.create_user(email, password, **extra_fields)

然后在模型中使用:

objects = CustomUserManager()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 05:32:37