Django更新表格

时间:2012-02-14 18:07:37

标签: 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()

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

我也尝试过使用

form = Name_Form(initial={'id':a.id})

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

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

感谢任何帮助

2 个答案:

答案 0 :(得分: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 )

答案 1 :(得分:3)

除非确实存在,否则不要添加request.POST:

def edit(request):

    a = request.session.get('a',  None)
    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)