zoukankan      html  css  js  c++  java
  • 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()
        
      • 前端页面展示效果
  • 相关阅读:
    超实用的PHP代码片段
    推荐五款优秀的PHP代码重构工具
    PHP开发搜索引擎技术全解析
    怎样成为一名PHP专家?
    PHP中该怎样防止SQL注入?
    有关PHP 10条有用的建议
    fir.im Weekly
    可能是一场很 IN 的技术分享
    fir.im Weekly
    更新日志
  • 原文地址:https://www.cnblogs.com/dongmengze/p/9843399.html
Copyright © 2011-2022 走看看