我创建自定义UserChangeForm并将所有字段设置为required = False,然后当用户以该形式更改一个字段时,数据库中的所有信息都会更改,如果用户留下一个字段,则将其更新为空。我只需要更改用户在表单中输入的字段,而其他字段在数据库中不会更改。
我尝试过:
class UserInfoChangeForm(UserChangeForm):
last_name = forms.CharField(label="",max_length=100,required=False)
username = forms.CharField(label="", required=False)
channel_name = forms.CharField(label="",max_length=100,required=False)
class Meta:
model = CustomUser
fields = ('username', 'channel_name','last_name')
def __init__(self, *args, **kwargs):
'
super(UserChangeForm, self).__init__(*args, **kwargs)
self.fields.pop('password', 'email')
我的views.py:
def update(request):
if request.method == 'POST':
form = UserInfoChangeForm(request.POST)
if form.is_valid():
form.save()
else:
form = UserInfoChangeForm()
return render(request,'home/update.html',{'userupdate':UserInfoChangeForm})
答案 0 :(得分:1)
您无需覆盖表单init,可以改写表单保存方法,以便仅更新所需的字段。
例如:
jql
答案 1 :(得分:1)
您可以将模型的实例传递给表单,以便它将使用现有值填充所有字段。这样,用户可以更改他们想要的任何字段。这样做的另一个好处是,它允许用户根据需要清除字段的值。
def update(request):
if request.method == 'POST':
form = UserInfoChangeForm(request.POST, instance=request.user)
if form.is_valid():
form.save()
else:
form = UserInfoChangeForm(instance=request.user)
return render(request,'home/update.html', {'userupdate': UserInfoChangeForm})