在我目前的项目,我正在创建一个小CMS,这样客户端将能够更新他的网站上的新图像,并取代旧的图库。为此,我使用泛型视图来简化整个过程。
添加一个新图像是没有问题的,但是UpdateView提供了一些html元素,我不希望我的客户看到:

以下是代码:
models.py
class GalleryPicture(models.Model):
title = models.CharField(max_length=200)
img = WEBPField(
verbose_name=_('Image'),
upload_to=image_folder,
null=True,
blank=True,
)
def __str__(self):
return f'{self.title}'
def get_absolute_url(self):
return reverse('Galerie Überblick')
class Meta:
verbose_name_plural = 'GalleryPictures'我还为图像使用了一个自定义字段,因此所有上传的图片都将自动转换为WEBP格式:
fields.py
class WEBPFieldFile(ImageFieldFile):
def save(self, name, content, save=True):
content.file.seek(0)
image = Image.open(content.file)
image_bytes = io.BytesIO()
image.save(fp=image_bytes, format="WEBP")
image_content_file = ContentFile(content=image_bytes.getvalue())
super().save(name, image_content_file, save)
class WEBPField(models.ImageField):
attr_class = WEBPFieldFileurls.py
path('content-manager/overview/gallery/<int:pk>/edit', EditGalleryImage.as_view(), name="Bild ändern")views.py
class EditGalleryImage(UpdateView):
model = GalleryPicture
template_name = './pages/content_edit/edit_gallery_image.html'
fields = ['title', 'img',]edit_gallery_image.html
<div class="form-content">
<form action="" method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{ form }}
<input class="submit-button link-button" type="submit" value="Speichern" name="save-image">
<input class="submit-button link-button" type="submit" value="Löschen" name="delete-image">
</form>
</div>我的第一种方法是在forms.py中创建一个自定义表单模型,并在那里为这个html元素定义一些类,这样我就可以用JS来隐藏它们:
forms.py
class UpdateImageForm(forms.ModelForm):
class Meta:
model = GalleryPicture
fields = ('title', 'img')
widgets = {
'img': forms.ImageField(
widget=forms.FileInput(attrs={'class': 'nice'})
),
}但如果我像这样使用我的views.py:
class EditGalleryImage(UpdateView):
model = GalleryPicture
template_name = './pages/content_edit/edit_gallery_image.html'
form_class = UpdateImageForm我收到一个错误:
AttributeError at /content-manager/overview/gallery/1/edit
'ImageField' object has no attribute 'is_hidden' 我为这个错误找到的修复方法,对我的情况也没有帮助。
也许你们中有人知道更好的方法来“微调”这些HTML元素,或者知道如何解决这个错误?我将非常感谢您的每一个答复。
发布于 2022-05-02 10:23:04
使用Django脆脆表单使其美观。我假设它们还会为您提供更好的粒度控制选项,以便更好地控制使用表单呈现的内容。
https://stackoverflow.com/questions/72082926
复制相似问题