2013-03-25 55 views
0

我正在尝试做一个非常简单的django网页,其中用户用两个数字填充表单的两个字段,提交它们并在第三个字段中获取结果。我正在使用ModelForms。Django将ModelForm显示为html表格

目前我只对第一部分感兴趣,其中用户导航到网址,并提示带有空格式的页面。我做了以下操作,但我在浏览器中看到的页面没有表单,只有提交按钮。我不知道这是因为我试图嵌入在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> 
+1

你有没有贴实际的代码?一切看起来正确。 – Rohan 2013-03-25 12:19:21

回答

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 %} 
+1

+1,但模板更改为-1。没有理由检查你使用的每个变量的存在。 – 2013-03-25 13:43:24

+0

是最好不是所有的变量,但为你的模板创建主要的变量。 – Amyth 2013-03-25 14:06:37

+0

非常感谢,它为我做了诡计!当试图同步我的代码时,我发现了错误,并通过使用models.CharField(max_length = 10)对其进行了更正 – toni 2013-03-26 07:31:01

0

您的模型应该使用models.CharField,而不是forms.CharField。

+0

你是对的,谢谢!第一部分为 – toni 2013-03-26 07:37:49