Django Form -- 自定义字段

  • 自定义字段示例
    • from django.forms import Form
      from django.forms import widgets
      from django.forms import fields
      from django.core.validators import RegexValidator
      
      ############## 自定义插件 ##############
      class SplitPhoneWidget(widgets.MultiWidget):
          def __init__(self):
              ws = (
                  widgets.TextInput(),
                  widgets.TextInput(),
                  widgets.TextInput(),
              )
              super(SplitPhoneWidget, self).__init__(ws)
      
          def decompress(self, value):
              """
              处理初始值,当初始值initial不是列表时,调用该方法
              :param value:
              :return:
              """
              if value:
                  return value.split(',')
              return [None, None, None]
      
      ############## 自定义字段 ##############
      class PhoneField(fields.MultiValueField):
          widget = SplitPhoneWidget
          def __init__(self, *args, **kwargs):
              # Define one message for all fields.
              error_messages = {
                  'incomplete': 'Enter a country calling code and a phone number.',
              }
              # Or define a different message for each field.
              f = (
                  fields.CharField(
                      error_messages={'incomplete': 'Enter a country calling code.'},
                      validators=[
                          RegexValidator(r'^[0-9]+$', 'Enter a valid country calling code.'),
                      ],
                  ),
                  fields.CharField(
                      error_messages={'incomplete': 'Enter a phone number.'},
                      validators=[RegexValidator(r'^[0-9]+$', 'Enter a valid phone number.')],
                  ),
                  fields.CharField(
                      validators=[RegexValidator(r'^[0-9]+$', 'Enter a valid extension.')],
                      required=False,
                  ),
              )
              super(PhoneField, self).__init__(error_messages=error_messages, fields=f, require_all_fields=False, *args,
                                               **kwargs)
      
          def compress(self, data_list):
              """
              当用户验证都通过后,该值返回给用户
              :param data_list:
              :return:
              """
              return data_list
      
      class DetailForm(Form):
          inp = PhoneField()
      

       

    • 前端页面展示效果
    •  

posted @ 2018-10-24 14:32  运维00001  阅读(504)  评论(0编辑  收藏  举报