22

私はクリスピーフォームを実行してきましたが、それはまさに私が望むことをしているようです:フォームをブートストラップレイアウトでレンダリングします。

さて、例は の使用について話しforms.Formます。これは問題ありません。次のようなコードを記述して作成できます。

class TemplateCreateForm(forms.Form):
    title = forms.CharField(label=(u'Task name'))
    description = forms.CharField(label=(u'Task description'))
    url_start = forms.CharField(label=(u'Start page url'))
    url_end = forms.CharField(label=(u'Final page url'))

    def __init__(self, *args, **kwargs):
        self.helper = FormHelper()
        self.helper.form_method = 'post'
        self.helper.add_input(Submit('submit', 'Submit'))
        super(TemplateCreateForm, self).__init__(*args, **kwargs)

でも、更新ってどうやるの?これをビューに入れた場合:

    form = TemplateCreateForm(request.POST or None, instance=template)

インスタンスはModelForm専用のため動作しません。

さて、ModelForm の代わりにクリスピー フォームを使用forms.Formできますか? ModelFormこれは私がしました

class TemplateCreateForm(ModelForm):
    title = forms.CharField(label=(u'Task name'))
    description = forms.CharField(label=(u'Task description'))
    url_start = forms.CharField(label=(u'Start page url'))
    url_end = forms.CharField(label=(u'Final page url'))

    def __init__(self, *args, **kwargs):
        self.helper = FormHelper()
        self.helper.form_method = 'post'
        self.helper.add_input(Submit('submit', 'Submit'))
        super(TemplateCreateForm, self).__init__(*args, **kwargs)

    class Meta:
        model = Template
        exclude = ('user')

ここで Meta クラスを追加しました。今:動作しますが、このように使用するのは正しいですか? 更新もこのように機能します。

更新を行うためにフォームを使用する正しい方法は何ですか?

4

1 に答える 1

61

私はdjango-crispy-formsのリード開発者です。フォーマットが少し悪いので、あなたの質問に従うかどうかはわかりません。正確に何をしようとしていますか?

django-crispy-formsは、単純なフォームの場合と同じように、ModelFormsで機能します。Djangoの上にあるので、混乱することはありません。フォームのレンダリングを制御するだけで、検証の動作やフォームインスタンスの作成方法などは変更されません。

編集:

ModelFormクリスピーフォームでを行う方法の例を追加しています。

class ExampleModelForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(ExampleModelForm, self).__init__(*args, **kwargs)

        # If you pass FormHelper constructor a form instance
        # It builds a default layout with all its fields
        self.helper = FormHelper(self)

        # You can dynamically adjust your layout
        self.helper.layout.append(Submit('save', 'save'))

    class Meta:
        model = ExampleModel

forms.Form最初の問題は、の代わりにサブクラス化していたことだと思いますforms.ModelForm。そのため、あなたの問題はDjangoに関連しており、クリスピーフォームに関連しているのではないと言いました。

後であなたの見解:

form = ExampleModelForm()

テンプレート内:

{% load crispy_forms_tags %}
{% crispy form %}
于 2012-11-02T19:10:31.833 に答える