2013-05-31 59 views
0

我試圖覆蓋save()方法ModelForm。我有一些字段添加到self._meta.fields(我有沒有包括他們因爲某些原因Meta類字段),這裏是代碼:django ModelForm - 覆蓋保存()並將字段添加到self._meta.fields

def save(self, commit=True): 
    """ 
    Save override 
    """ 
    fields_to_save_list = list(self._meta.fields) 
    fields_to_save_list.extend(['city','region','zip']) 
    fields_to_save_tuple = tuple(fields_to_save_list) 
    setattr(self._meta, 'fields', fields_to_save_tuple) 
    return super(SubjectAdminForm, self).save(commit) 

它不工作,我self._meta.fields是總是一樣。也許一些基本的python錯誤。任何幫助?

回答

1

這不會工作。您需要將其添加到__init__方法中。

def __init__(self, *args, **kwargs): 
    super(PartialAuthorForm, self).__init__(*args, **kwargs) 
    self.fields['city'] = forms.CharField()  
    self.fields['region'] = forms.CharField() 
    self.fields['zip'] = forms.CharField() 
+0

已經完成。我不想顯示這些字段的初始值,因爲我有相同的三個字段重複部件(重複是'city_sel','region_sel','zip_sel',他們是選擇小部件,並且只是表單字段,而不是'城市','地區','拉鍊'也是模型領域)。相應的小部件由js顯示/隱藏,取決於所選國家(我有一個選擇小部件的國家)。它可以工作,但不會保存值,因爲在父save()的save_instance方法中調用了一個construct_instance方法,該方法在Meta上聲明的字段上循環。我如何爲Meta添加值? – Luke

+0

它不是因爲字段不在meta中,而可能是您使用的是模型字段,並且模型不具有這些字段。我相信你不應該在保存方法中做到這一點,儘管 – karthikr

+0

是否可以將這些字段添加到哪裏? – Luke

相關問題