Django将ModelForm显示为HTML表单
我正在尝试做一个非常简单的Django网页,用户可以在一个表单里填写两个数字,提交后在第三个字段得到结果。我使用的是ModelForms。
目前我只关心第一部分,也就是用户访问网址时,会看到一个空表单的页面。我按照以下步骤操作,但我在浏览器中看到的页面没有表单,只有提交按钮。我不确定这是不是因为我试图嵌入到HTML代码中的ModelForm还没有内容,但我尝试给它设置默认值,结果还是不行。希望能得到一些帮助!:)
urls.py:
urlpatterns = patterns('',
url(r'^calculator/', views.calculate)
)
models.py:
class Calc(models.Model):
field1 = forms.CharField()
field2 = forms.CharField()
field3 = forms.CharField()
class CalcForm(ModelForm):
class Meta:
model = Calc
views.py:
def calculate(request):
c = CalcForm()
if request.method == 'POST':
#do the math
#return ...
else:
return render_to_response('home.html', {'calculator': c})
home.html:
<form action="/calculator/" method="post">
<table>
{{ calculator }}<!--I also tried .as_p, .as_ul...-->
</table>
<input type="submit" value="Submit" />
</form>
2 个回答
0
你的模型应该使用 models.CharField,而不是 forms.CharField。
0
将以下内容更改为:
class Calc(models.Model):
field1 = forms.CharField()
field2 = forms.CharField()
field3 = forms.CharField()
改为:
class Calc(models.Model):
field1 = models.CharField(max_length=10)
field2 = models.CharField(max_length=10)
field3 = models.CharField(max_length=10)
你有没有用上面的代码执行过 syncdb
?如果你执行过,那肯定会报错。这让我怀疑你的数据库里是否有正确的表。确保在上面的更改后执行一次 syncdb
。
另外,你应该总是检查一个实例是否存在,这样也能帮助你排查问题,看看对象是否正确传递了:
{% if calculator %}
<h3>Calculation Form</h3>
<form action="/calculator/" method="post">
<table>
{{ calculator }}
</table>
<input type="submit" value="Submit" />
</form>
{% endif %}