Django modelForm在提交时会改变方面

时间:2013-04-03 09:51:00

标签: python html django django-forms

我正在尝试使用django创建一个Web,其中一个表单被提示给用户,可以填充它的一些值并提交它们。然后,python程序将填充其余部分并显示用户填写的表单,以及服务器填写的字段。我正在使用modelForms,因为我想在我的模型和表单之间进行完全匹配。

由于几个原因,我使用以下代码来实现它,但我不知道为什么在提交表单后,字段不再显示为CharFields,而是类似于'html labels',以及不再可编辑。

代码是我的一个非常简化的版本,其中只有一个字段,由用户填充。

views.py:

def manage_printers(request):
    p = PrinterForm(request.POST or None)
    if request.method == 'POST':
        if p.is_valid():
            f = p.save(commit=False)
            f.name = request.POST.get('name')
            f.save()
            return render_to_response('web.html', {'printer': f}) 
        else:
            return HttpResponse("form not valid")
    return render_to_response('web.html', {'printer': p}, ) 

models.py:

class Printer(models.Model):
    name = models.CharField(max_length=200, default=' ')
    def __unicode__(self):
        return self.name

class PrinterForm(ModelForm):
    class Meta:
        model = Printer

web.html:

<form action="/useriface/" method="post"> 
    <p>Name: {{ printer.name }}</p>
</form>

1 个答案:

答案 0 :(得分:0)

正如我在评论中所解释的,当您保存表单时,您将获得一个模型实例。模型实例不是表单。它没有表单字段。将保存的实例传递到模板中代替表单时,不会显示表单域,您将显示已保存实例的字段的值。如果要重新显示表单,则应将其传递给模板,而不是保存的实例。