Django-FileField将不会上传到数据库

时间:2019-07-26 08:24:36

标签: python django django-forms django-database

我正在尝试使用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 不变

1 个答案:

答案 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})

希望这会对您有所帮助。