2011-02-10 9 views
4

フォームが与えられているので、フィールドの値をレンダリングする前にその値を変更したいと思います。これは私がしようとしているものです:Django:フォームフィールドの値がレンダリングされる前に変更できますが、フォームが初期化された後はどうすればできますか?

class RequiredFormSet(BaseFormSet): 
    def add_form(self): 
     tfc = self.total_form_count() 
     self.forms.append(self._construct_form(tfc)) 
     if self.is_bound: 
      data = self.management_form.data.copy() # make data mutable 
      data[TOTAL_FORM_COUNT] = self.management_form.cleaned_data[TOTAL_FORM_COUNT] + 1 
      self.management_form.data = data 
     else: 
      self.extra += 1 

すでに私はすべてがdataに保存されていたと思ったが、私はdataは、個々のフィールド(またはウィジェット)にオフに渡されたことを推測しますか?だから私は正確に修正するためにどのようなプロパティが必要ですか?

+0

このコードはどこですか? –

+0

@Daniel:コンテキストを追加しました。私はBaseFormSetをオーバーライドしています。データが有効な場合に限り、投稿後に追加のフォームを追加したいと思います。 – mpen

答えて

1

私はこれが役に立てば幸い:

これはBaseFormSetでフォームを作成する方法である:あなたが「self.initial」と呼ばれる属性があります見ることができるように、これは初期として渡され

def _construct_form(self, i, **kwargs): 
    """ 
    Instantiates and returns the i-th form instance in a formset. 
    """ 
    defaults = {'auto_id': self.auto_id, 'prefix': self.add_prefix(i)} 
    if self.is_bound: 
     defaults['data'] = self.data 
     defaults['files'] = self.files 
    if self.initial: 
     try: 
      defaults['initial'] = self.initial[i] 
     except IndexError: 
      pass 
    # Allow extra forms to be empty. 
    if i >= self.initial_form_count(): 
     defaults['empty_permitted'] = True 
    defaults.update(kwargs) 
    form = self.form(**defaults) 
    self.add_fields(form, i) 
    return form 

新しい作成されたフォームへのデータ。 _construct_formを使用して新しいフォームを追加し、カスタム初期データを設定する場合は、_construct_formを呼び出す前に 'self.initial'を変更する必要があります。初期値は、キーがフィールド名であり、値がフィールドに必要な値の辞書でなければなりません。

+0

ちょっと遅くなりましたが、これまでに戻ってきた場合、参考になりました:-)ありがとうございました。 – mpen

関連する問題