在视图内更新具有模型表单的对象

时间:2015-11-13 12:33:19

标签: django django-forms django-views

我需要使用其模型表单更新对象,并按照django doc中的描述传递实例。但是在保存表单时遇到这些问题:

  1. 当我更改title并提交表单时,它会给我一个错误,即image字段是必需的,而且图片字段变为空白。但是,当更改image时,标题字段不为空,并且不会出现任何错误。
  2. 如果一切正常并提交表单,它会创建一个新的snap对象,而不是更新instance对象。
  3. 在视图中,我尝试同时使用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')
    

1 个答案:

答案 0 :(得分:0)

经过几个小时的调试和抓头......我意识到表单的action的网址指向admin_snap_add()视图,而不是admin_snap_settings()视图。

希望这能帮助像我这样愚蠢的人。如果你们想让我删除这个问题,请通知我。谢谢你的时间。