Django更新表格

Joh*_*ash 5 django django-models django-forms django-views

我在一个页面中创建一个表单,然后在另一个页面中我正在尝试拉出表单(已经填充了已保存在其中的数据)并且想要对其进行更改以便在我保存时它会覆盖实例而不是创建另一个.

def edit(request):

    a = request.session.get('a',  None)
    form = Name_Form(request.POST, instance=a)
    if form.is_valid():
            j = form.save( commit=False )
            j.save()
Run Code Online (Sandbox Code Playgroud)

这似乎有效,但它不预先填写表格.相反,它以一个已经"提交"为空白的空白表单开头(您会看到所有错误告诉您有关必填字段的信息)

我也试过用

form = Name_Form(initial={'id':a.id})
Run Code Online (Sandbox Code Playgroud)

预填表格.但是,如果我这样做而不是form = Name_Form(request.POST, instance=a)行,它将不会覆盖实例,它将创建一个新实例.

我似乎无法将两种功能结合起来.

任何帮助表示赞赏

ale*_*lex 6

如果使用request.POST设置表单,它将使用在POST数据中找到的值填充所有表单字段.如果您在GET请求(request.POST为空)上执行此操作,则使用空值填充它.

尝试:

def edit(request):

    a = request.session.get('a',  None)

    if a is None:
        raise Http404('a was not found')

    if request.method == 'POST':
        form = Name_Form(request.POST, instance=a)
        if form.is_valid():
            j = form.save( commit=False )
            j.save()
    else:
        form = Name_Form( instance = a )
Run Code Online (Sandbox Code Playgroud)