使用视图内的模型表单更新 object

Update object with model form inside the view

我需要用模型形式更新 object 并按照 django doc 中的描述传递实例。但是我在保存表格时遇到了这些问题:

  1. 当我更改 title 并提交表单时,它给我一个错误,提示 image 字段是必需的并且图像字段变为空白。然而,当 image 被更改时,标题字段不是空白并且不会给出任何错误。
  2. 如果一切正常并提交表单,它会创建一个新的 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() 查看。

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