Форма Django не отображается на html-странице
Я изучаю Django и создал форму с помощью ModelForms. Сначала я написал views.py как функцию, но когда я попытался сделать его классом, форма не отображается, в то время как остальные теги работают. Вот мой views.py
в методе функции
def company(request):
company = Company.objects.all()
cform = CompanyForm()
form = CompanyForm(request.POST or None)
if form.is_valid():
form.save()
return HttpResponseRedirect('/company')
return render(request,'company/company.html',{
'company': company,
'cform':cform
})
Это основано на классе views.py
class CompanyView(generic.TemplateView):
model = 'Company'
template_name = 'company/company.html'
Я обновил urls.py
следующим образом
urlpatterns = [
path('',views.IndexView.as_view(), name='index'),
path('form/',views.CompanyView.as_view(),name='company'),
]
Наконец-то это мой html-шаблон
<h1>{{ company.company_name }}</h1>
<ul>
{% for company in company.choice_set.all %}
<li>{{ company.company_name }}</li>
{% endfor %}
</ul>
<form method="post">
{% csrf_token %}
<fieldset>
<legend>
<h2> Company Form </h2>
</legend>
{{ cform.as_p }}
</fieldset>
<input type="submit" value="Submit" />
</form>
и forms.py
from .models import Company
# create a ModelForm
class CompanyForm(forms.ModelForm):
class Meta:
model = Company
fields = ('company_name','location','email_id')
Я пробовал много изменений в шаблоне и все, но я не могу найти ошибку здесь.
Если вы используете представления, основанные на классах, вам не нужно определение функции в том виде, в котором оно приведено выше, обязательно удалите его. Обратитесь к документации здесь
Попробуйте это определение на основе класса и шаблона:
class CompanyView(generic.FormView):
template_name = 'company/company.html'
form_class = CompanyForm
success_url = '/redirect-to-somewhere/'
И затем в вашем HTML ссылайтесь только на {{ form.as_p }}
:
<form method="post">
{% csrf_token %}
<fieldset>
<legend>
<h2> Company Form </h2>
</legend>
{{ form.as_p }}
</fieldset>
<input type="submit" value="Submit" />
</form>