我正在尝试使用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>
答案 0 :(得分:0)
正如我在评论中所解释的,当您保存表单时,您将获得一个模型实例。模型实例不是表单。它没有表单字段。将保存的实例传递到模板中代替表单时,不会显示表单域,您将显示已保存实例的字段的值。如果要重新显示表单,则应将其传递给模板,而不是保存的实例。