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

如何在Django模板中获取自定义User对象的type字段?

解决Django模板中获取自定义User模型字段的问题

嘿,我来帮你搞定这个问题!你已经自定义了继承AbstractUser的User模型,但模板里{{ user.type }}拿不到值,大概率是几个常见配置或使用问题,一步步来排查:

1. 必须在settings.py中指定自定义用户模型

这是最容易忽略的关键步骤!Django默认使用自带的auth.User,你自定义模型后必须告诉Django使用你的模型,不然模板里的user对象还是默认的,没有你加的type、name这些字段。

在settings.py末尾加上:

AUTH_USER_MODEL = '你的应用名.User'

注意替换成你实际的应用名称(比如你的app叫accounts,就写'accounts.User')。

2. 确认用户已登录

模板里的user变量只有当用户成功登录后才是你的自定义User实例,未登录时是AnonymousUser,它没有你定义的这些字段。所以要先判断用户是否登录:

{% if user.is_authenticated %}
  你的用户类型:{{ user.type }}
  真实姓名:{{ user.name }}
{% else %}
  <p>请先登录查看用户信息</p>
{% endif %}

如果是在视图里,记得用@login_required装饰器确保只有登录用户能访问该页面:

from django.contrib.auth.decorators import login_required

@login_required
def your_view(request):
    return render(request, 'your_template.html')

3. 确保数据库迁移已正确执行

自定义模型后,必须生成并应用迁移,不然数据库里根本没有这些字段:

python manage.py makemigrations
python manage.py migrate

如果之前已经迁移过,修改模型后也要重新执行这两个命令哦。

4. 验证request.user的类型(排查用)

如果上面几步都做了还是不行,在视图里打印request.user的类型,确认它是不是你自定义的User类:

def your_view(request):
    print(type(request.user))  # 应该输出类似 <class '你的应用名.models.User'>
    return render(request, 'your_template.html')

如果输出的是django.contrib.auth.models.User,说明AUTH_USER_MODEL配置没生效,回去检查配置是否正确。

按照这些步骤来,应该就能正常获取到user.type以及其他自定义字段啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:18:10