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

无法将User Model的first_name、last_name数据传递至模板的求助

解决Django个人资料页面无法获取first_name/last_name的问题

看起来你遇到的问题在Django开发里挺常见的,大概率是User Model的定义或者数据本身的问题,咱们一步步来排查解决:

1. 检查自定义User Model的继承逻辑

如果你的项目用了自定义User Model,一定要确保它继承的是AbstractUser而不是AbstractBaseUser——因为AbstractUser默认包含了first_name、last_name这些字段,而AbstractBaseUser只保留了核心的认证字段(比如username、password、email)。

正确的自定义User Model示例:

from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    # 这里添加你的自定义字段,比如phone_number等
    phone_number = models.CharField(max_length=15, blank=True)

2. 确认settings.py中的AUTH_USER_MODEL配置

即使你继承了AbstractUser,如果没在settings里指定自定义User Model,Django还是会用默认的auth.User,这可能导致字段不匹配。在settings.py里添加:

AUTH_USER_MODEL = 'your_app_name.CustomUser'

⚠️ 注意:这个配置必须在项目第一次迁移前设置,如果已经迁移过数据库,可能需要重置数据库或者手动添加字段(更推荐重新初始化,避免后续坑)。

3. 验证数据库中的用户数据

有可能你的用户记录里first_name和last_name本身就是空值!可以通过Django Shell快速验证:

python manage.py shell

然后执行:

from django.contrib.auth import get_user_model
User = get_user_model()
current_user = User.objects.get(username='你的测试用户名')
print("First Name:", current_user.first_name)
print("Last Name:", current_user.last_name)
print("Full Name:", current_user.get_full_name())

如果输出都是空字符串,那就是数据问题——你需要在用户创建/编辑流程里填充这些字段,或者通过Django Admin手动给用户添加first_name和last_name。

4. 模板调试小技巧

可以在模板里临时添加调试代码,确认user对象的属性:

<!-- 临时调试用,上线前删掉 -->
<pre>{{ user.__dict__ }}</pre>

这会打印出user对象的所有属性和值,能直观看到first_name和last_name是否存在、有没有值。

按照上面的步骤排查,应该就能解决问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:22:02