首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何从GenericView中“修剪”不必要的输入字段?

我如何从GenericView中“修剪”不必要的输入字段?
EN

Stack Overflow用户
提问于 2022-05-02 06:13:00
回答 1查看 39关注 0票数 0

在我目前的项目,我正在创建一个小CMS,这样客户端将能够更新他的网站上的新图像,并取代旧的图库。为此,我使用泛型视图来简化整个过程。

添加一个新图像是没有问题的,但是UpdateView提供了一些html元素,我不希望我的客户看到:

以下是代码:

models.py

代码语言:javascript
复制
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

代码语言:javascript
复制
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 = WEBPFieldFile

urls.py

代码语言:javascript
复制
    path('content-manager/overview/gallery/<int:pk>/edit', EditGalleryImage.as_view(), name="Bild ändern")

views.py

代码语言:javascript
复制
class EditGalleryImage(UpdateView):
  model = GalleryPicture
  template_name = './pages/content_edit/edit_gallery_image.html'
  fields = ['title', 'img',]

edit_gallery_image.html

代码语言:javascript
复制
    <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

代码语言:javascript
复制
class UpdateImageForm(forms.ModelForm):
class Meta:
    model = GalleryPicture
    fields = ('title', 'img')
    widgets = {
        'img': forms.ImageField(
            widget=forms.FileInput(attrs={'class': 'nice'})
        ),
    }

但如果我像这样使用我的views.py

代码语言:javascript
复制
class EditGalleryImage(UpdateView):
  model = GalleryPicture
  template_name = './pages/content_edit/edit_gallery_image.html'
  form_class = UpdateImageForm

我收到一个错误:

代码语言:javascript
复制
AttributeError at /content-manager/overview/gallery/1/edit
'ImageField' object has no attribute 'is_hidden' 

我为这个错误找到的修复方法,对我的情况也没有帮助。

也许你们中有人知道更好的方法来“微调”这些HTML元素,或者知道如何解决这个错误?我将非常感谢您的每一个答复。

EN

回答 1

Stack Overflow用户

发布于 2022-05-02 10:23:04

使用Django脆脆表单使其美观。我假设它们还会为您提供更好的粒度控制选项,以便更好地控制使用表单呈现的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72082926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档