我正在尝试创建一个页面,管理员可以在其中使用一些FileField
上传一些文件。问题是我无法在表单中显示任何字段,我必须遗漏一些重要的内容,但我无法找出原因,希望有人能帮助我。
以下是与此表格相关的代码:
urls.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 %}
views.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>')
forms.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)
models.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
答案 0 :(得分:0)
您在这里遇到几个主要问题。
TemplateView对form_class
(或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 %}