2014-03-30 39 views
2

你如何改變一個Django的每個表單字段使用clean方法FORMSET FORMSET?阿爾特領域使用清潔

class MyInlineFormSet(BaseInlineFormSet): 

    def clean(self): 
     if self.cleaned_data['inputted'] == self.cleaned_data['answer']: 
      self.cleaned_data['is_correct'] = True 
     return self.cleaned_data 

這不工作,我見過人們遍歷每個表單,但他們只驗證,而不是改變。如果我遍歷每個表格,我如何返回cleaned_data?換句話說:

class MyInlineFormSet(BaseInlineFormSet): 

    def clean(self):  
     for form in self.forms: 
      if form.cleaned_data['inputted'] == form.cleaned_data['answer']: 
       form.cleaned_data['is_correct'] = True 
     ...? 

回答

0

我相信你是通過遍歷每個表單並設置清理的數據(第二個例子)在正確的軌道上。 BaseFormSet有一個名爲cleaned_data的屬性,它返回每個表單的已清理數據的列表。那是你要的嗎?例如: -

return self.cleaned_data 

它的字面返回:

[form.cleaned_data for form in self.forms] 

裏面應該有正確的數據(如修改),如果我正確地閱讀代碼。

如果你只在你的模型保存價值感興趣,我建議你避免clean方法,而是重寫save方法:

def save_new(self, form, commit=True): 
    form.instance.is_correct = ... 
    return super(...).save_new(...) 

def save_existing(...) 
+1

大衛,謝謝。你的回答是正確的self.cleaned_data 但仍然沒有改變領域。問題是,清潔數據只是一個訪問者而不是修飾符。我需要什麼,而不是: 「form.instance.is_correct = TRUE」 form.instance實際修改的文檔說明過的領域[https://docs.djangoproject.com/en/dev/topics/forms/modelforms/# overriding-clean-on-a-modelformset] – ssomnoremac

+0

添加到我的答案。我很高興你明白了,我認爲這是一個有用的問題,因爲內聯表單需要與普通表單處理有所不同。如果我沒有說出你想要的,請隨意提交你自己的答案。 – DavidM