Django出现FieldError: User模型不存在phone字段问题求助
错误根因
你将phone字段定义在了Post模型下,但表单类UserRegisterForm、UserUpdateForm的Meta配置中绑定的是Django内置的默认User模型,该原生模型默认没有phone字段,因此你在表单的fields列表中添加phone就会触发字段不存在的报错。你之前执行的迁移操作仅为Post表新增了phone字段,和User表完全无关,自然无法解决该问题。
解决方案
根据你的业务需求,可选择以下两种方案:
方案1:扩展用户模型(推荐,适合手机号属于用户账号属性的场景)
你项目中已经有Profile模型用来存储用户额外信息,直接复用该模型即可:
- 第一步:修改models.py,将
phone字段移到Profile模型下,如果你不需要给Post关联手机号,可以直接删掉Post模型里的phone字段避免混淆。
# models.py 中Profile模型修改示例 class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) image = models.ImageField(default='default.jpg', upload_to='profile_pics') # 新增phone字段 phone = models.CharField(max_length=10, default="") def __str__(self): return f'{self.user.username} Profile'
- 第二步:修改forms.py,移除User相关表单里的
phone字段,将phone添加到Profile表单中,同时修正现有表单的笔误:
from django import forms from django.contrib.auth.models import User from django.contrib.auth.forms import UserCreationForm from .models import Profile class UserRegisterForm(UserCreationForm): email = forms.EmailField() class Meta: model = User # 移除phone字段 fields = ['username', 'email','password1','password2'] class UserUpdateForm(forms.ModelForm): email = forms.EmailField() class Meta: model = User # 移除phone字段 fields = ['username','email'] class ProfileUpdateForm(forms.ModelForm): class Meta: model = Profile # 修正笔误:field改为复数fields,新增phone,删除错误的exclude配置 fields = ['image', 'phone']
- 第三步:执行迁移命令更新数据库
python manage.py makemigrations python manage.py migrate
- 第四步:调整对应的视图逻辑,注册/更新用户信息时同时保存User和Profile两个对象的数据即可。
方案2:调整表单绑定模型(适合手机号属于文章属性的场景)
如果你本来就是要给发布的Post文章添加联系电话属性,不需要和用户账号绑定,直接在Post对应的表单里添加phone字段即可,删掉User相关表单里的phone字段配置。
其他代码错误修正
你现有ProfileUpdateForm中存在两处笔误:
- 单复数错误:
field = ['image']应改为复数fields - 无效配置:
exclude = ['fields']属于完全错误的配置,直接删除即可。
内容的提问来源于stack exchange,提问作者user14685964
相关产品推荐
相关产品推荐

