我正在编辑从auth_User获取的Firtname和Lastname。当我编辑名称并保存时,将None值传递给名称。在验证页面源代码时,我没有看到任何错误。
form.py
moveToNext
view.py
from django.contrib.auth.models import User
class UserEditForm(forms.ModelForm):
class Meta:
model = User
fields = ('first_name','last_name', 'email')
HTML
def edit(request):
if request.method == 'POST':
user_form = UserEditForm(instance=request.user,
data=request.POST)
if user_form.is_valid():
user_form.save()
messages.success(request, 'Profile updated successfully!')
else:
messages.success(request, 'Error updating your profile!')
else:
user_form = UserEditForm(instance=request.user)
return render(request,
'account/edit.html',
{'user_form': user_form})
答案 0 :(得分:2)
您的表单字段上没有任何name
属性,因此不会提交任何数据。在两个字段中添加一个name
属性:
<input name="first_name" type="text" class="form-control" id="first_name" value="{{ user_form.first_name.value }}" >
<!-- ^^^^ note new name attribute -->
和:
<input name="last_name" type="text" class="form-control" id="last_name" value="{{ user_form.last_name.value }}" >
还要注意,您已经在表单的字段中指定了email
,但是HTML中没有email
字段,这也会引起问题。您应该将该字段添加到HTML或将其从表单定义中删除。
您还可以考虑使用Django的form helpers to render the fields。
答案 1 :(得分:1)
您在模板中创建的<input>
标签不包含name
属性。当您尝试提交表单时,这些项目为will not be sent。
可以使用name
属性访问每个表单字段的正确html_name
,例如:
{{ user_form.first_name.html_name }}
@solarissmoke提到您应该考虑使用Django表单帮助程序,我非常同意。如果您不喜欢默认小部件在HTML中的显示方式,则可以在创建表单时添加类:
from django.contrib.auth.models import User
class UserEditForm(forms.ModelForm):
class Meta:
model = User
fields = ('first_name','last_name', 'email')
widgets = {
'first_name': forms.TextInput(attrs={'class': 'form-control'}),
'last_name': forms.TextInput(attrs={'class': 'form-control'}),
'email': forms.EmailInput(attrs={'class': 'form-control'}),
}
然后在您的模板中:
<div class="form-row">
<label for="{{ user_form.first_name.auto_id }}" class="col-sm-2 control-label" placeholder="First Name">First Name:</label>
<div class="col-sm-4">
{{ user_form.first_name }}
</div>
<label for="{{ user_form.last_name.auto_id }}" class="col-sm-2 control-label">Last Name:</label>
<div class="col-sm-4">
{{ user_form.last_name }}
</div>
</div>
<div class="form-row">
<label for="{{ user_form.email.auto_id }}" class="col-sm-2 control-label">Email address:</label>
<div class="col-sm-4">
{{ user_form.email }}
</div>
</div>