1

使用 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 设置高度?

4

1 回答 1

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})
于 2012-10-06T20:32:38.420 回答