django - Django 表单:编辑图像字段(删除并显示现有)
问题描述
我正在尝试使用带有图像字段的 Django 模型表单,但我遇到了两个问题:
- 我不知道如何在输入中显示图像的当前名称
- 我不知道如何提供删除图像的方法
表格:
class CityLogoForm(forms.ModelForm):
logo = forms.ImageField(widget=forms.FileInput(attrs={'class': 'custom-file-input'}), required=False)
class Meta:
model = City
fields = ['logo']
意见:
def management_form_general(request, city_slug):
city = City.objects.get(slug=city_slug)
if request.method == 'POST':
logo_form = CityLogoForm(request.POST, request.FILES, instance=city)
if logo_form.is_valid():
logo_form.save()
else:
logo_form = CityLogoForm(instance=city)
return render(request, 'management/form/city_general.html', {'city': city, 'logo_form': logo_form})
html:
<form action="" enctype="multipart/form-data" method="post">
<div class="form-group row">
<label for="id_city" class="col-sm-2 col-form-label form_title">{{ logo_form.logo.label }}</label>
<div class="custom-file">
{{ logo_form.logo }}
<label class="custom-file-label" for="{{ logo_form.logo.id_for_label }}" data-browse="Choisir Image">{{ logo_form.logo.label }}</label>
</div>
</div>
</form>
我有一个脚本在用户上传内容时更改标签,但我找不到获取图像字段当前值的方法(对于正常的,它已正确预填充)。由于它似乎没有预先填充输入,因此当输入为空时它似乎被忽略,因此永远不会删除当前徽标。
编辑:如果可能,答案需要在 formset_factory 的 for 循环中可行
解决方案
我不知道如何在输入中显示图像的当前名称
如果图像字段不为空,则向您添加一个返回图像文件名的属性,例如:
import os
class MyModel(models.Model):
image = models.ImageField(...)
@property
def image_name(self):
return os.path.basename(self.image.path) if self.image else ''
然后在 html 模板中添加{{ your_model.image_name }}
您需要显示当前图像名称的位置。
我不知道如何提供删除图像的方法
我最近遇到了同样的问题,我通过clear_image
在 html 中添加一个隐藏的复选框来解决它(当用户单击清除图像按钮时使用 js 检查它),而不是我在 django 表单中处理接收到的值。
推荐阅读
- json - 提交后无法清除 angular-json-schema-form
- scipy - pip 未能为 scipy 制造轮子
- c# - 在 C# Winforms 中通过其 unicode 使用汉堡菜单符号/图标
- php - 检查文件内容是否在没有字符的换行符处结束
- go - 如何将 JWT 的到期日期解析为 Go 中的 time.Time()?
- python - 尝试安装 Heroku 软件包时收到错误消息
- python-3.x - Cherrypy NGINX 错误:/some/path 的 403 目录索引被禁止
- php - 使用php将带有输入值的数组发送到数据库
- twilio - 发送 VCF 文件 (Vcard) 无法通过 WhatsApp 或 SMS,我做错了什么?
- php - 如何在 PHP 中检索 Posted JSON、构造字符串和电子邮件