2015-10-31 21 views
2

我有一個使用自定義小部件的字段的自定義窗體。我需要設置類的小部件,而目前我只能做到這樣的:指定Widget的類

class DesignCampaignForm(ModelForm): 

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

這意味着,聲明如下每個插件,我需要兩條線,並重復類所有的時間 - 不是很乾。

有沒有一種方法來指定小部件本身中的小部件類?我一直無法在documentation中找到。

回答

2

如果您希望類,在對widget的所有實例,則可以覆蓋(或修改)widget的render方法:

class CustomImagePreviewWidget(ImagePreviewWidget): 

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

,然後使用您的形式CustomImagePreviewWidget

看它多一些,你也可以做到這一點在widget的__init__方法:

class CustomImagePreviewWidget(ImagePreviewWidget): 

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

很好,謝謝!第二種解決方案對我來說看起來更清潔,並且它很有效 – dangonfast