如何在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
相关产品推荐
相关产品推荐

