2012-04-11 49 views
0

我有以下型号:为什么不modelform_factory使用我的模型字段属性

class MyModel(models.Model): 
    myField = models.CharField() 
    myOtherField = models.CharField() 

    def __init__(self,*args,**kwargs):    
     super(MyModel,self).__init__(*args, **kwargs) 
     self._meta.get_field_by_name("myField")[0].default = get_default_value() 
     self._meta.get_field_by_name("myOtherField")[0]._choices = get_choices() 

def get_default_value(): 
    # obviously, this does more than just return a static value; 
    # how I actually get the default value for this field isn't relevant for this question 
    return "my default value" 

def get_choices(): 
    # as above, how this works is irrelevant 
    return [("one","one"),("two","two")] 

class MyForm(forms.ModelForm): 
    class Meta: 
     model = MyModel 


MyFormFactory = modelform_factory(MyModel) 

def MyView(request): 
    model = MyModel() 
    form1 = MyForm(instance=model) 
    form2 = MyFormFactory(instance=model) 
    return render_to_response('my_template.html',{'form1':form1, 'form2':form2}) 

Form1中得到正确地呈现,与MyField的默认值和myOtherField渲染为具有适当选择一个选择。但是form2只有两个空白的TextInput字段。任何想法如何确保从modelform_factory方法生成的表单尊重这些属性?

回答

0

如果您希望查看每个对象的一系列编辑窗体,我相信您在使用生成的工厂时需要设置queryset参数。默认行为是显示所有对象,再加上一个空的表单。

def MyView(request): 
    ... 
    form2 = MyFormFactory(instance=model, queryset=MyModel.objects.all()) 

This link may help。

带上一粒盐。这是我第一天玩Python的第一天。

相关问题