我现在使用UserChangeForm来更新用户表单,当我尝试通过请求post发送时,函数确实起作用,但不会更改用户对象,而是像create方法一样保存对象。 那么,在这个时刻,我怎么能改变表单对象呢
views.py
# Edit Your account
@login_required
def edit_profile(request, user_slug=None):
template_name = 'account/edit_profile.html'
if request.method == "POST":
request_user = request.user.userprofile
user_profile = UserProfile.objects.get(slug=user_slug)
form = EditForm(request.POST)
if form.is_valid():
form.instance.slug = user_slug
form.save()
return redirect('account:view_profile', form.instance.slug)
return render(request, template_name, {'form': form})
else:
form = EditForm()
user_profile = UserProfile.objects.get(slug=user_slug)
return render(request, template_name, {'form': form})
url.py
urlpatterns = [
path('view-profile/<slug:user_slug>/', views.view_profile, name='view_profile'),
# /account/edit-profile/
path('edit-profile/<slug:user_slug>/', views.edit_profile, name='edit_profile'),
]
编辑表单.html
{% extends 'base.html' %}
{% block title %} Edit Profile {% endblock %}
{% block body %}
<div class="edit-form">
<div class="container">
<div class="my-form">
<form method="post">
{% csrf_token %}
{% for field in form %}
<div class="form-group">
<label for="exampleInputEmail1">{{ field.label_tag }}</label>
<p>{{ field }}</p>
</div>
{% endfor %}
<button type="submit" class="btn btn-primary btn-lg">Change Password</button>
</form>
</div>
</div>
</div>
{% include 'base_footer.html' %}
{% endblock %}
forms.py
# Edit your data except password
class EditForm(UserChangeForm):
password = None
class Meta:
model = User
fields = ('first_name', 'last_name', 'email')
def edit(self, fields):
user = super(EditForm, self).save(commit=False)
if user.commit:
user.save()
return user
因此,您只需将实例传递给
EditForm
注意:如果您也上传图像,请记住也要传递
request.FILES
您不需要在模型表单上提供编辑函数,我建议使用基于类的泛型视图,因为它易于使用和扩展。以下是我的建议:
Forms.py
#views.py
这就是我为用户信息更新创建视图的方式,它就像一个符咒
模板文件
如果使用引导,则可以使用Javascript添加样式
相关问题 更多 >
编程相关推荐