django - 如何在更新视图中在 django 中进行可清除的文件输入
问题描述
在我的 django 应用程序中,我有一个带有文件字段“identification_image_front”的人物模型。我还使用 Fileinput 小部件为该字段定义了一个 ModelForm。对于模板,我使用 jasny-bootstrap 插件来表示带有“选择文件”、“删除”和“更改”选项的文件输入。在 CreateView 中创建新工作时,可以使用以下代码保存文件。但是,当使用 UpdateView 更新现有工作人员时,文件输入始终为空。无法查看工作人员是否附加了文件,也无法从现有工作人员中删除文件。有什么方法可以在文件输入中加载文件并启用“删除”选项,以便我可以删除或更改现有工作人员的文件?也许还有另一种方法可以使用其他插件或 HTML 代码来做到这一点。
这是我的代码
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})
解决方案
推荐阅读
- gam - 使用 gam.check() 检查基础尺寸结果的 GAM 拟合问题
- javascript - 如何在反应笑话单元测试中模拟 document.location.href
- python - 你能帮我在python中旋转这个熊猫数据框吗?
- html - 如何在表格中添加标题?
- latex - Latex-引理在末尾显示黑色矩形
- django - 使用 RSA 算法 Django Rest Framework 简单 JWT 时出现错误无法反序列化密钥数据
- javascript - 电子公证未能签署二进制文件
- ios - 如何使用协议委托将数据从 swift 传递到目标 c?
- apache-spark - Spark不可分割/可分割的输入文件
- go - 无法使用 go 模块更新单个包