`
maplye
  • 浏览: 114652 次
  • 来自: ...
社区版块
存档分类
最新评论

自定义form field和widget(YearMonthField)

阅读更多

django的form将界面的展示和数据校验转换做了很好的封装,并且提供了很多的一些Field和Widget,昨天在做一个项目时有一个月报表的功能,查询的时候需要选择某年某月,于是参照一些网站信息,写了一个YearMonthField.

#创建年月表单控件   
class YearMonthWidget(forms.MultiWidget):
    """
    A widget that splits a date into Month/Year with selects.
    """
    def __init__(self, attrs=None,year_range=None,month_range=None):
        
        YEARS = year_range or range(2000,2021)
        MONTHES = month_range or range(1,13)

        years = map(lambda x: (x,x), YEARS )
        months = map(lambda x:(x,x>9 and x or '0'+str(x)), MONTHES )

        widgets = (forms.Select(attrs=attrs, choices=years),forms.Select(attrs=attrs, choices=months))
        super(YearMonthWidget, self).__init__(widgets, attrs)
    
    def decompress(self, value):
        if value:
            return [value.year, value.month]
        return [None, None]

class YearMonthField(forms.MultiValueField):
    widget=YearMonthWidget
    def __init__(self,*args,**kwargs):
        fields = (
                forms.IntegerField( required=True),
                forms.IntegerField( required=True),
                )
        super(YearMonthField, self).__init__(fields, *args,**kwargs )
    
    def compress(self, data_list):
        if data_list:
            return datetime.date(year=int(data_list[0]), month=int(data_list[1]), day=1)
        return datetime.date.today()

 

代码说明:

主要是继承MultiWidget和MultiValueField

关键是分别有两个方法需要重写,decompress和compress.

widget中需要将数据解压缩成list和其中的widgets对应.

field中需要将list转成所需要的数据格式,如YearMonthField的datetime类型.

 

使用如下:

import datetime
class ReportMonthForm(Form):
    month = YearMonthField(label='查询月份',initial=datetime.date.today())

 界面如下:

  • 大小: 6.2 KB
1
0
分享到:
评论

相关推荐

    c# 自定义form

    在C#编程中,自定义Form(窗体)是一项常用技术,它允许开发者根据自己的需求创建具有独特外观和功能的用户界面。自定义窗体不仅仅是改变颜色和样式,更是对窗体的行为、交互以及视觉效果的全面定制。下面将详细探讨...

    winform 自定义form皮肤

    在Windows Forms(WinForm)开发中,自定义Form皮肤是一个常见的需求,这可以让应用程序看起来更加专业和吸引用户。本文将深入探讨如何在C#中为WinForm应用创建自定义的Form皮肤,尤其适合初学者学习。 首先,我们...

    自定义窗体Custom Form

    在Windows应用程序开发中,自定义窗体(Custom Form)是一个重要的技术点,它允许开发者根据需求创建具有独特外观和功能的窗口。本项目利用C#编程语言实现了自定义窗体的功能,尤其是对窗体边框的自定义,使得应用...

    源码解析之rc-field-form解读与实现

    `rc-field-form`是React社区中一个流行的表单库,它提供了一种高效、灵活的方式来处理复杂的表单逻辑和数据管理。在本文中,我们将深入探讨`rc-field-form`的核心概念、工作原理以及如何在实际项目中实现和使用它。 ...

    自定义表单系统FormDesign.zip

    1、通过FormDesign自定义表单画出相应的表单; 2、将生成好的XML放到程序中,并通过后台自动编译成JSP; 注:FormDesing只是自定义表单的程序,并没有后台编译成JSP的过程。 标签:FormDesign

    BUIW中Form&Widget构架分析

    - **事件处理**:Form中的事件处理包括事件的捕获、传递和响应,允许开发者自定义事件处理逻辑。 - **Widget支持管理**:Form负责管理和控制其内部的Widget,如添加、删除、布局调整等操作。 - **Title和Softkey...

    BUIW Form&Widget构架分析

    - **Title和Softkey支持**:对于顶级的RootForm,BUIW提供了对标题和软键的支持,允许开发者自定义标题文字和软键功能。 - **窗体绘制**:Form具备窗口绘制的能力,可以根据需要进行定制化绘制,实现个性化的用户...

    fast-components:FAST自定义Form.io组件

    在给定的“fast-components: FAST自定义Form.io组件”主题中,我们将深入探讨如何在FAST框架中定制Form.io组件,以及相关的JavaScript技术。 Form.io是一个流行的云平台,它提供了用于构建、托管和管理动态表单和...

    自定义C#Form皮肤

    要自定义Form皮肤,我们需要深入理解Form的属性、方法和事件。例如,`BackColor`属性可以设置窗体的背景颜色,`ForeColor`可以设置前景色,`BorderStyle`可以改变边框样式,而`TransparencyKey`则允许创建透明效果。...

    纯js+css自定义form表单美化控件

    本资源“纯js+css自定义form表单美化控件”专注于提升用户注册界面的视觉体验,通过JavaScript(js)和层叠样式表(css)技术,将传统的表单元素如文本框、单选框和复选框进行个性化设计,从而提供更加吸引人的交互...

    c# WPF中自定义加载时实现带动画效果的Form和FormItem.docx

    "C# WPF 中自定义加载时实现带动画效果的Form和FormItem" 在本文中,我们将讨论如何在 C# WPF 中自定义加载时实现带动画效果的 Form 和 FormItem。Form 和 FormItem 是 WPF 中常用的控件,它们可以用来显示文本、...

    c#自定义消息在Form间传递

    本文将详细介绍如何在C#中实现自定义消息在Form间传递的过程,包括发送端和接收端的具体实现细节。 #### 发送端实现步骤 **Step1: 添加引用** 首先,需要在项目中添加必要的引用以支持跨窗体的消息传递。这一步...

    C# winfrom 自定义表单设计器

    Smart.FormDesigner可能包含了实现上述功能的源代码,开发者可以通过阅读和学习这些代码来加深对C# WinForm自定义表单设计器的理解,并将其应用到自己的项目中。 总结来说,C# WinForm自定义表单设计器是一个强大的...

    基于jQuery和layui的form表单自定义js动态生成

    这种方式灵活且高效,可以根据业务需求自定义表单结构,同时结合layui的form模块,可以实现表单验证和美化,提高用户体验。在实际项目中,你可能还需要考虑更复杂的需求,如表单重用、动态增删表单行等,这需要你对...

    自定义表单设计器演示版源码(C#).rar.rar

    自定义表单设计器是一种强大的工具,它允许用户根据自己的需求创建和定制各种数据输入界面,无需深入编程细节。本项目提供了C#语言实现的自定义表单设计器的演示版源码,这对于开发者来说是一个很好的学习资源,特别...

    微信小程序表单自定义组件vest-form-master.zip

    1. **表单验证**:vest-form 提供了一套完善的验证规则和机制,可以对用户的输入进行实时校验,如非空、邮箱格式、手机号码等,极大地提高了用户体验和数据准确性。 2. **自定义组件**:通过 vest-form,开发者可以...

    jsf自定义组件的实现

    5. **配置文件**:`faces-config.xml`是JSF应用的核心配置文件,用于注册自定义组件,指定其类型和渲染器等信息。 ### 创建自定义组件的步骤 #### 第一步:实现标签库描述库 创建`ticker.tld`文件,定义自定义...

    form-field-tooltip(气泡提示)

    在IT行业中,用户界面(UI)的设计至关重要,它直接影响到用户体验和软件的易用性。"form-field-tooltip"是UI设计中的一个关键元素...总的来说,理解和运用好form-field-tooltip,可以显著提升UI的易用性和用户满意度。

    .NET C# Custom Form Designer (含源碼)

    本项目 ".NET C# Custom Form Designer" 提供了一个自定义表单设计工具,允许开发者根据需求创建和扩展自己的用户界面。这一工具的核心价值在于其高度的灵活性和清晰的架构设计,使得开发者能够快速地构建出符合业务...

Global site tag (gtag.js) - Google Analytics