1

この質問からクラスのinitiateパラメーターを使用できることを理解しています。Form

編集フォームを作成していて、既存のオブジェクトから値を開始する方法を見つけようとしています。

テンプレート レベルとビュー レベルのどちらで行うのですか (テンプレート レベルでの方法もわかりません)。それとも、実際のオブジェクトをフォームに渡してフォームレベルで開始する必要があるのでしょうか?

ベストプラクティスは何ですか?


編集:

@Bentoの場合:私のオリジナルFormでは、このようなことをしています

class OrderDetailForm(forms.Form):
    work_type = forms.ChoiceField(choices=Order.WORK_TYPE_CHOICES)
    note = forms.CharField(widget=forms.Textarea)

    def __init__(self, creator_list=None, place_list=None, *args, **kwargs):
        super(OrderCreateForm, self).__init__(*args, **kwargs)

        if creator_list:
            self.fields['creator'] = UserModelChoiceField(
                queryset=creator_list,
                empty_label="Select a user",
            )

    def clean(self):
        super(OrderCreateForm, self).clean()

        if 'note' in self.cleaned_data:
            if len(self.cleaned_data['note']) < 50:
                self._errors['note'] = self.error_class([u"Please enter a longer note."])

                del self.cleaned_data['note']

        return self.cleaned_data

どうすればそれを行うことができModelFormますか?

4

1 に答える 1

2

ModelForm を使用していると仮定すると、実際にはかなり単純です。タスクは次のようなものです。「編集」に入力するモデルのオブジェクトを取得し、ModelForm に基づいて新しいフォームを作成し、「インスタンス」を使用してオブジェクトを入力します。

ビューのスケルトンは次のとおりです。

def view(request): 
  obj = Model.objects.get(pk = objectpk)
  form = MyModelForm(instance = obj)

  return render (request, "template", {'form' = form})

次のようなものを使用して、「初期」値にアクセスできます。

form.fields['fieldname'].initial = somevalue

そして、上記のようなフォームを返します。

于 2012-05-17T20:15:27.937 に答える