Django表单:编辑图像字段(删除并显示现有的)



我正在尝试一个带有图像字段的Django模型表单,但我遇到了两个问题:

  1. 我不知道如何在输入中显示图像的当前名称
  2. 我不知道如何提供删除图像的方法

形式

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 }},您需要在其中显示当前图像名称。

我不知道如何提供一种方法来删除图像

我最近也遇到了同样的问题,我通过在html中添加一个隐藏的复选框clear_image(当用户单击清除图像按钮时使用js进行检查(来解决了这个问题,而不是在django表单中处理收到的值。

最新更新