python - 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.DetailView):
给我一个例外Exception Type: AttributeError at /company/form/ Exception Value: 'str' object has no attribute '_default_manager'
。当其更新为class CompanyView(generic.FormView):
错误异常时'NoneType' object is not callable
class CompanyView(generic.TemplateView):
呈现除了{{ cform.as_p }}
我尝试了对模板的许多更改,但我无法在此处找到错误。
解决方案
如果您使用基于类的视图,则不需要上面的函数定义,请务必将其删除。请参阅此处的文档
试试这个基于类的定义和模板:
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>
推荐阅读
- java - Spring Security 中没有为 id "null" 映射 PasswordEncoder
- python - 托管在 Heroku 上时出现“WebSocket 握手期间出错”
- php - PHP/SQL 根据求和结果进行选择
- windows - Can you have a single domain across 2 servers within Hyper-V Manager?
- node.js - deleteOne, findOneandDelete, findOneandremove are all deleting two documents
- mysql - 如何在mysql中添加'AND'标签排除
- laravel - GitHub 操作。如何找出缺少哪个依赖项?
- azure - 无法获取存储帐户密钥。无法在 azure 数据工厂中读取 null 的属性“切片”
- asp.net - 如何从自定义文件夹提供图像?
- python - 文本文件或 json 文件如何以及何时关闭?