Django将ModelForm显示为HTML表单

0 投票
2 回答
1537 浏览
提问于 2025-04-17 20:13

我正在尝试做一个非常简单的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 %}

撰写回答