0

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

出于几个原因,我开始使用以下代码,但我不知道为什么在提交表单后,这些字段不再显示为 CharFields,而是类似于“html 标签”,并且不可编辑了。

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

视图.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}, ) 

模型.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

网页.html:

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

1 回答 1

0

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

于 2013-04-03T10:41:37.473 回答