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 に答える