【发布时间】:2016-05-27 14:38:13
【问题描述】:
我查看了所有类似的问题,但似乎都没有帮助。
这是我在class ProfileEditView(generic.DetailView): 中的POST 方法
def post(self, request, *args, **kwargs):
profile_id = kwargs.get('pk')
user_detail = User.objects.get(id=profile_id)
form = EditProfileForm(request.POST, request.FILES, instance=user_detail)
if form.is_valid():
updated = form.save(commit=False)
updated.phone = form.cleaned_data["phone"]
updated.address = form.cleaned_data["address"]
updated.gender = form.cleaned_data["gender"]
updated.save()
messages.success(request, "Profile details updated.")
return redirect("profileview", profile_id)
else:
context = {}
context["form"] = form
context["profile_id"] = kwargs["pk"]
return render(request, self.template_name, context)
模板:
<form enctype="multipart/form-data" method="POST" action="{% url 'profile_edit_view' profile_id %}">
{% csrf_token %}
{{form|crispy}}
<input type="submit" value="Save">
</form>
模型.py
class UserDetail(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL)
profile_picture = models.FileField(upload_to=profile_image_upload, null=True, blank=True)
phone = models.CharField(max_length=10)
address = models.CharField(max_length=1000)
gender = models.CharField(max_length = 10, choices=gender_choices)
【问题讨论】:
-
我不明白,你为什么要手动从
form.cleaned_data中取出所有数据并手动保存?为什么不能直接拨打updated = form.save()? -
也试过了,还是不行:(
-
@ShangWang 在
form = EditProfileForm(request.POST, request.FILES, instance=user_detail)中有'instance' 属性与这个问题有什么关系? -
提交表单时会发生什么?表格有效吗?
EditProfileForm是什么样的?使用UpdateView可能比使用DetailView更容易。 -
好的,
still didn't work一点帮助都没有。你需要告诉我它到底是如何不起作用的。你看到错误了吗?您是否检查了已保存的实例updated?
标签: django django-forms django-views