指定 Widget 的 class

Specify Widget's class

我有一个自定义表单,其中包含一个使用自定义小部件的字段。我需要设置widget的class,目前只能这样设置:

class DesignCampaignForm(ModelForm):

    brand_logo = FileField(widget=ImagePreviewWidget)
    brand_logo.widget.attrs['class'] = 'image-preview'

这意味着对于像这样声明的每个小部件,我需要两行,并且一直重复 class - 不是很干。

有没有办法在小部件本身中指定小部件 class?我一直无法在 documentation.

中找到它

如果您希望 class 在小部件的所有实例中都存在,您可以覆盖(或修改)小部件的 render 方法:

class CustomImagePreviewWidget(ImagePreviewWidget):

    def render(self, name, value, attrs={}):
        attrs['class'] = 'image-preview'
        return super(CustomImagePreviewWidget, self).render(name, value, attrs)

然后在您的表单中使用 CustomImagePreviewWidget

再看一下,您也可以在小部件的 __init__ 方法中执行此操作:

class CustomImagePreviewWidget(ImagePreviewWidget):

    def __init__(self, attrs=None):
        super(CustomImagePreviewWidget, self).__init__(attrs)
        self.attrs['class'] = 'image-preview'