我有一个自定义表单,其中包含使用自定义窗口小部件的字段我需要设置小部件的类,目前我只能这样做:
class DesignCampaignForm(ModelForm):
brand_logo = FileField(widget=ImagePreviewWidget)
brand_logo.widget.attrs['class'] = 'image-preview'
这意味着对于每个声明的小部件,我需要两行,并且一直重复这个类 - 不是很干。
有没有办法在小部件本身中指定小部件类?我无法在documentation中找到它。
答案 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'