2013-01-10 26 views
2

當我試圖創造一個像無法初始化綁定表單上的ModelForm字段?

MyModelForm(instance=a_model_instance_) 

一個的ModelForm它好像Django的防止初始模型場的形式的__init__方法中的任何設置,如:

def __init__(self, *args, **kwargs): 
    super(MyModelForm, self).__init__(*args, **kwargs) 

    if self.instance.pk: 
     if self.instance.my_field: 
      my_field = self.instance.my_field 
     else: 
      # show parent's field instead 
      my_field = self.instance.parent.my_field 

     self.fields['my_field'].initial = my_field 

是否有任何理由爲什麼初始化一個表單的__init__方法中的字段在表單綁定到實例後不再起作用了?

+0

我認爲這是相關的問題:http://stackoverflow.com/questions/2988548/overriding-initial-value-in-modelform –

回答

4

我想你想設置其他模型字段值的字段的初始值,如果它是無:

def __init__(self, *args, **kwargs): 
    super(MyModelForm, self).__init__(*args, **kwargs) 

    if self.instance.pk: 
     if not self.initial.get('my_field'): 
      self.initial['my_field'] = self.instance.parent.my_field 
+0

對不起 - 這是一個錯字(固定)。我的原始代碼使用實例。所以問題仍然存在。 – mzu

+0

@ mzu請檢查我的更新與您的問題相關的答案。 –

+0

謝謝 - 你的方法似乎工作!你能解釋一下這背後的原因嗎?例如。爲什麼我不能直接通過self.fields ['my_field']初始設置字段? – mzu