Django показывает ModelForm в виде HTML-формы
Я пытаюсь сделать очень простую веб-страницу django, где пользователь заполняет 2 поля формы двумя числами, отправляет их и получает результат в третьем поле. Я использую ModelForms.
На данный момент меня интересует только первая часть, где пользователь переходит на URL и ему предлагается страница с пустой формой. Я делаю следующее, но страница, которую я вижу в своем браузере, не имеет формы, а только кнопка отправки. Я не знаю, потому ли это, что ModelForm, которую я пытаюсь встроить в HTML-код, все еще пуст, но я попытался дать ему значения по умолчанию, и он все еще не работал. Любая помощь будет очень ценится!:)
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 ответа
Изменить следующее:
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 %}
Ваша модель должна использовать models.CharField, а не forms.CharField.