我正在尝试使用auto
上传一些文件,但是当我按下“提交”按钮并运行FileField
时,我的数据库表中有一个新行,但是我尝试上传的文件是不在那里。
我一直在寻找解决问题的时间,但是我唯一看到的是关于form.save()
的信息,但是正如您在下面的文件中看到的那样,我已经拥有了它... < / p>
views.py
enctype="multipart/form-data"
phyto_admin_fichiers.html
class AdminFichiersPhyto(CreateView):
template_name = 'phyto/phyto_admin_fichiers.html'
model = models.PhytoFile
fields = ['general_treatment', 'other']
def form_valid(self, form):
print("GONNA SAVE")
form.save()
if self.request.POST.get('autre'):
print("autre")
# gonna add some code to read the 'other' file
if self.request.POST.get('trtm_gen'):
print("traitement généraux")
# gonna add some code to read the 'general_treatment' file
forms.py
{% block forms %}
{% if user.is_staff%}
<form method="post" action="" enctype="multipart/form-data">
<fieldset>
<div style="display: inline-block; margin-left: 22%; text-align: center"><b>Traitements généraux</b>{{ form.general_treatment }}</div>
<div style="display: inline-block; text-align: center"><b>Autres traitements</b>{{ form.other }}</div>
</fieldset>
</form>
<p style="margin-top: 2%">
<input id="submit" class="btn btn-primary" type="submit" value="Synchronisation Traitements généraux" name="trtm_gen"/>
<input id="submit" class="btn btn-primary" type="submit" value="Synchronisation Autre" name="autre"/>
</p>
{% endif %}
{% endblock %}
models.py
class PhytoFileForm(forms.ModelForm):
class Meta:
model = models.PhytoFile
fields = ['general_treatment', 'other']
def __init__(self, *args, **kwargs):
super(PhytoFileForm, self).__init__(*args, **kwargs)
但是,即使通过表单无法正常工作,我也可以通过管理页面上传文件。 我真的希望你们中的一个能为我提供解决方案,我已经困扰了一段时间...
编辑 在阿基伦德拉回答之后
我有最新的代码:
views.py
class PhytoFile(models.Model):
date = models.DateTimeField("Date", default = datetime.datetime.now)
general_treatment = models.FileField("Traitements généraux", upload_to='fichiers_phyto/', blank=True, null=True)
other = models.FileField("Autres traitements", upload_to='fichiers_phyto/', blank=True, null=True)
class Meta:
verbose_name = "Liste - Fichier phyto"
verbose_name_plural = "Liste - Fichiers phyto"
def __str__(self):
return str(self.date)
phyto_admin_fichiers.html
class AdminFichiersPhyto(View):
template_name = 'phyto/phyto_admin_fichiers.html'
form = forms.PhytoFileForm()
def get(self, request):
return render(request, self.template_name, {'form': self.form})
def post(self, request):
form = forms.PhytoFileForm(request.POST, request.FILES)
form.save()
return render(request, self.template_name, {'form': self.form})
forms.py 和 models.py 不变
答案 0 :(得分:0)
第一个submit
按钮应位于<form>
标记内,还应{% csrf_token %}
{% block forms %}
{% if user.is_staff%}
<form method="post" action="" enctype="multipart/form-data">
{% csrf_token %}
<fieldset>
<div style="display: inline-block; margin-left: 22%; text-align: center"> <b>Traitements généraux</b>{{
form.general_treatment }}
</div>
<div style="display: inline-block; text-align: center"><b>Autres traitements</b>{{ form.other }}</div>
</fieldset>
<p style="margin-top: 2%">
<input id="submit" class="btn btn-primary" type="submit"
value="Synchronisation Traitements généraux" name="trtm_gen"/>
<input id="submit" class="btn btn-primary" type="submit"
value="Synchronisation Autre" name="autre"/>
</p>
</form>
{% endif %}
{% endblock %}
现在来到view
。
class AdminFichiersPhyto(View):
template_name = "phyto/phyto_admin_fichiers.html"
form = PhytoForm()
def get(self, request):
return render(request, self.template_name, {'form': self.form})
def post(self, request):
form = PhytoForm(request.POST, request.FILES)
form.save()
return render(request, self.template_name, {'form': self.form})
希望这会对您有所帮助。