首页 > 解决方案 > 如何在更新视图中在 django 中进行可清除的文件输入

问题描述

在我的 django 应用程序中,我有一个带有文件字段“identification_image_front”的人物模型。我还使用 Fileinput 小部件为该字段定义了一个 ModelForm。对于模板,我使用 jasny-bootstrap 插件来表示带有“选择文件”、“删除”和“更改”选项的文件输入。在 CreateView 中创建新工作时,可以使用以下代码保存文件。但是,当使用 UpdateView 更新现有工作人员时,文件输入始终为空。无法查看工作人员是否附加了文件,也无法从现有工作人员中删除文件。有什么方法可以在文件输入中加载文件并启用“删除”选项,以便我可以删除或更改现有工作人员的文件?也许还有另一种方法可以使用其他插件或 HTML 代码来做到这一点。

更新视图中的输入字段为空 在 createview 中可以删除文件

这是我的代码

class WorkerModel(BaseModel):

    name = models.CharField(verbose_name=_("Nombre "), max_length=50,  blank=False, null=False)
    surname1 = models.CharField(verbose_name=_("Primer apellido"), max_length=50,  blank=False, null=False)
    surname2 = models.CharField(verbose_name=_("Segundo apellido"), max_length=50,  blank=False, null=False)

    identification_image_front = models.FileField(verbose_name=_("Foto carnet frontal"), upload_to="app_person_identification_image_front",
                                                null=True, blank=True)

 class WorkerForm(forms.ModelForm):
    
        class Meta:
            model = WorkerModel
            exclude = ("id",)
            widgets = {
                
                'name':forms.TextInput(attrs={'class': 'form-control'}),
                'surname1' : forms.TextInput(attrs={'class': 'form-control'}),
                'surname2' : forms.TextInput(attrs={'class': 'form-control'}),
                'identification':forms.TextInput(attrs={'class': 'form-control'}),
                'identification_image_front': forms.FileInput(attrs={'accept': 'application/pdf, image/png, image/jpeg'}),
                }

在模板中

<div>
      {{ form.identification_image_front.label }}
  </div>
  <div class="fileinput fileinput-new input-group" data-provides="fileinput">
    <div class="form-control" data-trigger="fileinput">
      <span class="fileinput-filename"> </span>
    </div>
    <span class="input-group-append">
      <span class="input-group-text fileinput-exists" data-dismiss="fileinput">
        Remove
      </span>
      <span class="input-group-text btn-file">
        <span class="fileinput-new">Select file</span>
        <span class="fileinput-exists">Change</span>
        {{ form.identification_image_front }}
        
      </span>
    </span>
  </div>

视图定义

class WorkerCreateView(LoginRequiredMixin, CreateView):
    model = WorkerModel
    #group_required = [u'Auxiliar Legal', 'Jefe de la Oficina Local', 'Jefe de la RBRP']
    context_object_name = 'obj'
    template_name = 'app/worker/worker_form.html'
    form_class = WorkerForm

    def get_success_url(self):
        return reverse_lazy("app:worker_detail", kwargs={"pk":self.object.id})

class WorkerUpdateView(LoginRequiredMixin, UpdateView):
    model = WorkerModel
    #group_required = [u'Auxiliar Legal', 'Jefe de la Oficina Local', 'Jefe de la RBRP']
    context_object_name = 'obj'
    template_name = 'app/worker/worker_form.html'
    form_class = WorkerForm
   
    def get_success_url(self):
        return reverse_lazy("app:worker_detail", kwargs={"pk":self.object.id})

标签: djangojasny-bootstrap

解决方案


推荐阅读