Django Contrib评论:如何覆盖评论的textarea小部件?

时间:2012-08-10 10:32:31

标签: django django-forms django-comments django-widget

使用django.contrib.comments,我定义了一个自定义评论应用。我想覆盖文本区域小部件,以便文本框显得更小。

所以我创造了这个:

#forms.py
class CustomCommentForm(CommentForm):
    #...otherstuff...

    comment = forms.CharField(label=_('Comment'),
        widget=forms.Textarea(attrs={'rows':4}),
        max_length=COMMENT_MAX_LENGTH)

但我真的不想重新定义评论字段。我想重新定义该字段使用的小部件。即只有ModelForms可以做的事情:

class Meta:
    widgets = {
        'comment': Textarea(attrs={'rows': 4}),
    }

有没有办法在不重新定义字段的情况下重新定义小部件?或者我应该使用CSS设置高度?

1 个答案:

答案 0 :(得分:1)

您是正确的,您只能将widgets选项用于模型表单的Meta类。

但是,您无需重新定义整个comment字段。相反,覆盖表单的__init__方法并在那里更改字段widget

class CustomCommentForm(CommentForm):
    #...otherstuff...

    def __init__(self, *args, **kwargs):
        super(CustomCommentForm, self).__init__(*args, **kwargs)
        self.fields['comment'].widget = forms.Textarea(attrs={'rows':4})