【问题标题】:Dynamic Django form not only with inputs动态 Django 表单不仅具有输入
【发布时间】:2011-06-18 16:05:52
【问题描述】:

我很久没用 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 文本?

【问题讨论】:

    标签: python django django-forms


    【解决方案1】:

    定义一个自定义小部件:

    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 小部件:

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

    【讨论】:

      【解决方案2】:

      您应该查看 forms.MultiValueField 和 forms.MultiWidget。但这并不好,所以你必须对它们进行子类化。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-12
        • 1970-01-01
        • 2020-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-08
        相关资源
        最近更新 更多