使用视图内的模型表单更新 object
Update object with model form inside the view
我需要用模型形式更新 object 并按照 django doc 中的描述传递实例。但是我在保存表格时遇到了这些问题:
- 当我更改
title
并提交表单时,它给我一个错误,提示 image
字段是必需的并且图像字段变为空白。然而,当 image
被更改时,标题字段不是空白并且不会给出任何错误。
- 如果一切正常并提交表单,它会创建一个新的
snap
object 而不是更新 instance
object.
在视图中,我尝试同时使用 obj.save()
和 obj.update()
,但没有任何帮助。请帮我解决这个问题。非常感谢您的帮助。谢谢。
形式:
class SnapForm(forms.ModelForm):
class Meta:
model = Snap
fields = ['title', 'description', 'image', 'upload_date']
查看:
def admin_snap_settings(request, snap_id):
if not request.user.is_admin:
return render(request, 'admin_login_invalid.html')
else:
instance = Snap.objects.get(id=snap_id)
if request.user == instance.user:
if request.method == "POST":
form = SnapForm(request.POST, request.FILES, instance=instance)
if form.is_valid():
form.save()
return HttpResponseRedirect('/custom123user/admin/snapview')
else:
form = SnapForm(instance=instance)
return render(request, 'admin_snap_settings.html', {
'form': form
})
else:
return render(request, 'wrong_user.html')
经过数小时的调试和挠头...我意识到表单 action
的 url 指向 admin_snap_add()
视图而不是 admin_snap_settings()
查看。
希望这对像我这样愚蠢的人有所帮助。如果你们想让我删除这个问题,请通知我。谢谢你的时间。
我需要用模型形式更新 object 并按照 django doc 中的描述传递实例。但是我在保存表格时遇到了这些问题:
- 当我更改
title
并提交表单时,它给我一个错误,提示image
字段是必需的并且图像字段变为空白。然而,当image
被更改时,标题字段不是空白并且不会给出任何错误。 - 如果一切正常并提交表单,它会创建一个新的
snap
object 而不是更新instance
object.
在视图中,我尝试同时使用 obj.save()
和 obj.update()
,但没有任何帮助。请帮我解决这个问题。非常感谢您的帮助。谢谢。
形式:
class SnapForm(forms.ModelForm):
class Meta:
model = Snap
fields = ['title', 'description', 'image', 'upload_date']
查看:
def admin_snap_settings(request, snap_id):
if not request.user.is_admin:
return render(request, 'admin_login_invalid.html')
else:
instance = Snap.objects.get(id=snap_id)
if request.user == instance.user:
if request.method == "POST":
form = SnapForm(request.POST, request.FILES, instance=instance)
if form.is_valid():
form.save()
return HttpResponseRedirect('/custom123user/admin/snapview')
else:
form = SnapForm(instance=instance)
return render(request, 'admin_snap_settings.html', {
'form': form
})
else:
return render(request, 'wrong_user.html')
经过数小时的调试和挠头...我意识到表单 action
的 url 指向 admin_snap_add()
视图而不是 admin_snap_settings()
查看。
希望这对像我这样愚蠢的人有所帮助。如果你们想让我删除这个问题,请通知我。谢谢你的时间。