gpt4 book ai didi

Django 表单 : Edit image field (delete and show existing)

转载 作者:行者123 更新时间:2023-12-02 08:31:14 26 4
gpt4 key购买 nike

我正在尝试使用带有图像字段的 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>

我有一个脚本在用户上传某些内容时更改标签,但我找不到一种方法来获取图像字段的当前值(对于正常的图像字段,它已正确预填充)。由于它似乎没有预先填充输入,因此当输入为空时它似乎会忽略,因此永远不会删除当前 Logo 。

编辑:如果可能的话,答案需要在 formset_factory 上的 for 循环中可行

最佳答案

I don't know how to show the current name of the image in the input

向模型添加一个属性,如果图像字段不为空,则返回图像文件名,例如:

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 }} 您需要显示当前图像名称的位置。

I don't know how to provide a way to remove the image

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

关于Django 表单 : Edit image field (delete and show existing),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58698390/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com