我正在尝试做一个非常简单的django网页,其中用户填写带有两个数字的表单的2个字段,提交它们并在第三个字段获得结果。我正在使用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>
答案 0 :(得分:0)
你的模型应该使用models.CharField,而不是forms.CharField。
答案 1 :(得分: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 %}