2011-01-31 120 views
0

我沒有使用Django的長期和我有一個動態的Django形式:動態Django的形式

class GoodsAddPropertyForm(forms.Form): 
    def __init__(self, groups_and_properties, *args, **kwargs): 
     super(GoodsAddPropertyForm, self).__init__(*args, **kwargs) 
     for group_and_properties in groups_and_properties: 
     self.fields[group_and_properties.name] = CharField(label = group_and_properties) 
     for property in group_and_properties.properties: 
      if property.type == 'boolean': 
       self.fields[property.name] = forms.BooleanField(label = property.name, required=False) 
      elif property.type == 'float': 
       self.fields[property.name] = forms.FloatField(label = property.name) 

我怎麼能作出這樣的self.fields[group_and_properties.name] = CharField(label = group_and_properties)將沒有輸入一個簡單的HTML文本元件?

回答

1

定義自定義窗口小部件:

self.fields[group_and_properties.name] = CharField(label = group_and_properties, widget = HTMLWidget()) 

from django.utils.safestring import mark_safe 

    class HTMLWidget(forms.widgets.Widget): 
     def render(self, name, value, attrs=None): 
      output = [] 
      output.append('<p>Hello world: %s</p>' % value) 
      return mark_safe(u''.join(output)) 

爲您CharField插件的指定它

-1

你應該看看forms.MultiValueField和forms.MultiWidget。但它不好,所以你必須繼承它們。