django - 无法从我的视图中显示表单
问题描述
我正在尝试创建一个页面,管理员可以在其中使用一些FileField
. 问题是我无法显示表单中的任何字段,我一定遗漏了一些重要的东西,但我找不到什么,希望有人能帮助我。
这是与此表单相关的代码:
网址.py
urlpatterns = patterns(
'',
url(r'^admin_fichiers_phyto/$', phyto_views.AdminFichiersPhyto.as_view(), name='phyto-admin-fichiers-phyto'),
)
phyto_admin_fichiers.html
{% block forms %}
{% if user.is_staff%}
<fieldset>
<div>
<span>{{ form.other }}</span>
</div>
</fieldset>
<p>
<input id="submit" class="btn btn-primary" type="submit" value="Synchronisation Autre" name="autre"/>
<input id="submit" class="btn btn-primary" type="submit" value="Synchronisation Traitements généraux" name="trtm_gen"/>
</p>
{% endif %}
{% endblock %}
视图.py
class AdminFichiersPhyto(TemplateView):
template_name = 'phyto/phyto_admin_fichiers.html'
form_class = forms.PhytoFileForm
current_url = 'phyto-files'
context_object_name = 'phyto_files'
def post(self, request, *args, **kwargs):
if request.POST.get('autre'):
return HttpResponse('<h1>autre</h1>')
if request.POST.get('trtm_gen'):
return HttpResponse('<h1>Traitement Generaux</h1>')
表格.py
class PhytoFileForm(forms.Form):
class Meta:
model = models.PhytoFile
fields = ['general_treatment', 'other']
def __init__(self, *args, **kwargs):
super(PhytoFileForm, self).__init__(*args, **kwargs)
模型.py
class PhytoFile(models.Model):
general_treatment = models.FileField(upload_to='fichiers_phyto/', blank=True, null=True)
other = models.FileField(upload_to='fichiers_phyto/', blank=True, null=True)
这是我的网页显示的内容:
我不明白为什么不显示该字段,我真的希望有人有知识来帮助我解决我的问题!^_^
祝你今天过得愉快 !:D
解决方案
您在这里有几个主要问题。
form_class
TemplateView 对(或者context_object_name
,就此而言)一无所知。通过post
这样定义,您实际上避免了对上传的数据做任何事情。您需要使用处理表单的视图;在您的情况下, CreateView 将是理想的。在该视图中,该响应代码需要进入form_valid
.
其次,PhytoFileForm 需要继承自forms.ModelForm
; 标准的 Form 类对模型一无所知,也不使用 Meta 类。但是,由于您没有在字段选择之外自定义表单,因此您可以只依赖 CreateView 创建的自动表单。
接下来,您的模板已损坏;它没有 HTML 表单元素。此外,由于您的表单类有两个字段,但您只在模板上显示一个,因此表单永远不会有效。
所以,把它放在一起:
class AdminFichiersPhyto(CreateView):
template_name = 'phyto/phyto_admin_fichiers.html'
model = models.PhytoFile
def form_valid(self, form):
form.save()
if request.POST.get('autre'):
return HttpResponse('<h1>autre</h1>')
if request.POST.get('trtm_gen'):
return HttpResponse('<h1>Traitement Generaux</h1>')
{% block forms %}
{% if user.is_staff%}
<form method="post" action="" enctype="multipart/form-data">
<fieldset>
<div>
<span>{{ form.other }}</span>
</div>
<div>
<span>{{ form. general_treatment }}</span>
</div>
</fieldset>
<p>
<input id="submit" class="btn btn-primary" type="submit" value="Synchronisation Autre" name="autre"/>
<input id="submit" class="btn btn-primary" type="submit" value="Synchronisation Traitements généraux" name="trtm_gen"/>
</p>
</form>
{% endif %}
{% endblock %}
推荐阅读
- javascript - VueJS中需要把这个对象改成这个对象数组
- javascript - 在 vue / element ui 对话框中有条件地删除注入的元素
- javascript - React 等待父组件渲染
- css - 本地字体到 scss 文件的反应
- sql - 在带参数的过程中插入语句
- postgresql - 无法使用 Spring Boot 连接 Postgres 数据库
- javascript - 如何对嵌套的obj javascript进行排序
- powershell - 搜索文件和文件夹,包括隐藏
- javascript - Powershell Import-Csv 试图将 CSV 文件转换为 HTML,但我不知道如何将 ID 参数添加到表中(需要 jscript)
- sql - SQL 仅选择单行号 x