指定Widget的类

时间:2015-10-31 23:21:17

标签: django django-widget

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

class DesignCampaignForm(ModelForm):

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

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

有没有办法在小部件本身中指定小部件类?我无法在documentation中找到它。

1 个答案:

答案 0 :(得分:2)

如果您希望该类在窗口小部件的所有实例中都存在,您可以覆盖(或修改)窗口小部件的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'