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()
        
      • 前端页面展示效果
  • 相关阅读:
    scrapy+pymongo爬取小说实战
    Scrapy的正确安装
    linux: 用户管理,文件传送
    Java日期时间处理总结
    Numpy快速入门
    python 文件与文件夹操作
    python文件基础
    26. 删除排序数组中的重复项
    1两数之和
    152乘积最大子数组
  • 原文地址:https://www.cnblogs.com/dongmengze/p/9843399.html
Copyright © 2011-2022 走看看