无法将User Model的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

