• 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()
        
      • 前端页面展示效果
  • 相关阅读:
    记录贝叶斯深度学习
    tensorflow2.0 新特性 + kaggle练习
    Caffe学习记录(十三) OCNet分割网络学习
    Caffe学习记录(十二) ICNet分割网络学习二
    Caffe学习记录(十一) ICNet分割网络学习
    Caffe学习记录(十) SegNet等分割网络学习
    关于完美拖拽的问题三
    关于完美拖拽的问题二
    关于完美拖拽的问题一
    无限下拉实现原理
  • 原文地址:https://www.cnblogs.com/dongmengze/p/9843399.html
Copyright © 2020-2023  润新知