0

モデルフォームでフロッピーフォームを使用していますが、それらに関する唯一のドキュメントは、クラス Meta を介してウィジェットを指定することです。ただし、テキストエリア ウィジェットのプレースホルダーをフォーム変数に依存させたいのですが、Meta はクラス変数にアクセスできません。フレームワークでこれをそのまま達成するためのヒントはありますか?

今、私はこれをforms.pyに持っています:

class ChapterForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        self.placeholder = "Chapter " + (kwargs.pop('number'))
        super(ChapterForm,self).__init__(*args, **kwargs)
    class Meta:
        model = Chapter
        fields = ("name", "text", ...)
        widgets = {
            "name": PlaceholderInput(attrs={'placeholder':self.placeholder, 'class':'headline'}),
        }

標準 (非モデルフォーム) フォームを使用し、変数を使用してフィールド/ウィジェットを宣言できることはわかっていますが、モデルの検証を犠牲にすることなくそれを行う方法があるかどうか疑問に思っていました。

4

1 に答える 1

1

フィールドのウィジェットを介してこれらの属性を定義できます

from django.forms.widgets import TextInput

def __init__(self, *args, **kwargs):
    self.placeholder = "Chapter %s" % kwargs.pop('number')
    super(ChapterForm,self).__init__(*args, **kwargs)

    self.fields['name'].widget = TextInput(attrs={
        'class': "headline",
        'placeholder': self.placeholder
    });
于 2014-11-18T16:02:02.387 に答える