【问题标题】:Django CreateView Model Form not uploading FileDjango CreateView 模型表单不上传文件
【发布时间】:2020-05-07 03:42:26
【问题描述】:

我遇到的问题是我的模型表单没有上传文件,我让它工作,在添加更多代码后现在不工作,这就是它发生的情况:它上传/保存所有其他字段,除了文件,奇怪的是,如果我从管理站点执行此操作,它确实有效。我会补充一点,不是在数据库列中写入路径。

models.py

class Polizas(models.Model):

    nombre = models.CharField(max_length=30, blank=True, null=True)
    numero = models.CharField(max_length=30, unique=True)
    aseguradora = models.CharField(max_length=20, blank=True, null=True)
    carro = models.ForeignKey(
        Carros, on_delete=models.CASCADE, blank=True, null=True)
    inicio_poliza = models.DateField(
        auto_now=False, auto_now_add=False, blank=True, null=True)
    fin_poliza = models.DateField(
        auto_now=False, auto_now_add=False, blank=True, null=True)
    documento = models.FileField(upload_to='polizas/', blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        verbose_name_plural = "Polizas"
        ordering = ['nombre']

    def __str__(self):
        return self.nombre

    def get_absolute_url(self):
        return reverse('polizas')

forms.py

class PostPolizas(forms.ModelForm):
    class Meta:
        model = Polizas
        fields = ('nombre', 'numero', 'aseguradora', 'carro', 'inicio_poliza',
                  'fin_poliza', 'documento')
        widgets = {'inicio_poliza': forms.DateInput(attrs={'type': 'date'}),
                   'fin_poliza': forms.DateInput(attrs={'type': 'date'})
                   }

views.py

class PolizaCreate(LoginRequiredMixin, CreateView):
    login_url = '/login/'
    redirect_field_name = 'redirect_to'

    form_class = PostPolizas
    template_name = "add_insurance.html"

终端

[06/May/2020 22:32:17] "POST /insurance/add/ HTTP/1.1" 200 4557
[06/May/2020 22:32:25] "POST /insurance/add/ HTTP/1.1" 302 0

我已尝试验证表单但它不起作用,这是在我上传文件的其他模型表单中发生的错误,它上传文本字段和日期但不上传文件。

【问题讨论】:

  • “它不起作用” 太模糊了,具体点。
  • 也许您也错过了“它会上传除文件之外的所有其他字段,奇怪的是,如果我从管理站点执行此操作,它确实有效。”我还要补充一点,它不会写入数据库中的路径

标签: django django-models django-forms


【解决方案1】:

尝试像这样添加 enctype="multipart/form-data":

<form enctype="multipart/form-data" method="post">
    {% csrf_token%}
    <table> {{form}} </table>
    <input type="submit" value="Post">
</form>

在模板表单中。

【讨论】:

    【解决方案2】:

    默认情况下,表单仅传递 request.POST,因为您正在上传文件,因此您必须将 request.FILES 传递到表单的构造函数中

    关注:https://docs.djangoproject.com/en/2.2/topics/http/file-uploads/

    【讨论】:

      猜你喜欢
      • 2013-04-06
      • 2021-12-31
      • 2019-11-17
      • 2012-06-24
      • 2018-03-05
      • 1970-01-01
      • 2021-09-19
      • 1970-01-01
      • 2014-09-20
      相关资源
      最近更新 更多