2012-02-29 36 views
0

我儘量讓定製Django的形式,從JSON格式,這樣的Django從JSON格式

{ 
    "1": ["fieldlabel1", "str", false], 
    "2": ["fieldlabel2", "str", false] 
} 

其中 'fieldlabel1' - 領域,int或STR的標籤 - 字段類型IntegerField或CharField,和最後一個參數True或False是否需要字段。

FIELD_TYPES = { 
    'str': forms.CharField, 
    'int': forms.IntegerField, 
} 

    class ItemsGroup(models.Model): 
     ... 
     fields = models.TextField(u'Addtional fields (JSON format)', blank=True, null=True, default=None) 

     # raw_fields = { 1: (u'fieldlabel1','int', True), 2: (u'fieldlabel2','str', False) } 
     def fields_form(self): 
      try: 
       raw_fields = json.loads(self.fields) 
       fields = {} 
       for key in raw_fields.keys(): 
        fields['field'+str(raw_fields[key])] = FIELD_TYPES[raw_fields[key][1]](
         label = raw_fields[key][0], required = raw_fields[key][2] 
        ) 

       return type('Form', (forms.Form,), fields) 

      except ValueError: 
       return None 

在模板中,當我這樣做:{{ items_group.fields_form }},接受類的django.forms.forms.Form「,這{{ items_group.fields_form.as_ul }}收到什麼。

回答

1

您直接使用Form類,則需要例如創建窗體的實例

klass = type('Form', (forms.Form,), fields) 
form = klass() 
return form