2013-01-10 29 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