我正在尝试实现一些功能,允许用户使用Django表单在Django项目中编辑他们的个人信息。当用户在表单中输入新值并点击输入时,它们将被带回主配置文件页面,这是正确的,但值仍保持与以前相同。以下是我尝试实现该功能的方法:
表单
class UpdateProfile(forms.ModelForm):
email = forms.EmailField(required=False)
first_name = forms.CharField(required=False)
last_name = forms.CharField(required=False)
age = forms.IntegerField(required=False)
height = forms.IntegerField(required=False)
weight = forms.IntegerField(required=False)
class Meta:
#Here are the fields that i want editable
model = User
fields = ('email', 'first_name', 'last_name', 'age', 'height', 'weight')
#Here im trying to commit the changes to the user and return the user
def save(self, commit=True):
super(UpdateProfile, self).__init__(commit)
if commit:
user.save()
return user
视图
def update_profile(request):
args = {}
if request.method == 'POST':
form = UpdateProfile(request.POST, instance=request.user)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('account/profile.html'))
else:
form = UpdateProfile()
args['form'] = form
return render(request, 'account/edit_profile.html', args)
HTML
% block head %}
<title>Profile</title>
{% endblock %}
{% block body %}
<div class="container">
<form method="POST" action="{% url 'account:profile' %}">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Submit</button>
</form>
<br>
</div>
{% endblock %}
答案 0 :(得分:1)
您的表单直接提交到视图个人资料页面。但该页面可能并不期望验证表格。您需要将其提交回update_profile页面,通常使用表单HTML元素中的"."
操作来执行此操作。
<form method="POST" action=".">
完成此操作后,您会发现表单save()
方法存在一些问题。无论如何,这种方法没有任何用处;你应该删除它,让自动调用超类。
答案 1 :(得分:0)
这一行似乎错了:
super(UpdateProfile, self).__init__(commit)
您从父类调用__init__
,但调用的方法是save()
...此外,您还引用了user
变量(希望)未在此范围内定义。