使用自定义小组件访问ModelForm中的字段元数据

时间:2014-08-07 12:20:03

标签: django django-models django-forms

所以我有一个Model,ModelForm和Custom Widget。我的目标是访问自定义小部件中的字段verbose_name和help_text。我无法弄清楚如何在Widget中获取数据,所以我必须将它传递给模型表单中的新SmartTextInput小部件?

这看起来很丑陋,还有更好的方法吗?

这是ModelForm

class LeadForm(ModelForm):
  class Meta:
    model = Lead

    widgets = {
      'first_name': SmartTextInput(label=model._meta.get_field('first_name').verbose_name),
      'middle_name': SmartTextInput(label=model._meta.get_field('middle_name').verbose_name),
      'last_name': SmartTextInput(label=model._meta.get_field('last_name').verbose_name),
    }

这是自定义小部件

class SmartTextInput(TextInput):

  def __init__(self, attrs=None, label=None):
    super(TextInput, self).__init__(attrs)

    self.label = label

  def render(self, name, value, attrs=None, label=None):
    input_html = super(TextFieldWidget, self).render(name, value, attrs)

    html = """<label class="label">""" + self.label + """</label>"""
    html = html + input_html

    return mark_safe(html);

0 个答案:

没有答案