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
分享到:
相关推荐
c# 自定义form 自定义窗体 自定义窗体的各个属性 定制自己喜欢的form样式,颜色
这是一个自定义的Windows Form,使用CSharp编写,可以自定义皮肤。
winform 自定义form皮肤 代码适合c#初学者
brew Form和widget详解中文版
快速组件 FAST自定义Form.io组件
form-field-tooltip(气泡提示)
c#自定义消息在Form间传递
用户自定义form皮肤样式,实现完美转化,
这是一款纯js和css制作的一个用户注册界面的美化表单空间,将文本框和单选框、复选框等空间全部从新设计美化。效果演示地址:http://www.xwcms.net/js/bddm/55798.html
基于jQuery和layui的form表单自定义js动态生成
1、通过FormDesign自定义表单画出相应的表单; 2、将生成好的XML放到程序中,并通过后台自动编译成JSP; 注:FormDesing只是自定义表单的程序,并没有后台编译成JSP的过程。 标签:FormDesign
import 'package:datetime_picker_formfield/datetime_picker_formfield.dart' ; // ... class BasicDateField extends StatelessWidget { final format = DateFormat ( "yyyy-MM-dd" ); @override Widget bu
laravel-admin框架form表的的一个自定义插件。主要功能:模拟grid表格,实现一个列表样式的form表单控件。修复form表单的with方法和default方法。
用户自定义控件 windows form c# 自定义控件 时钟 控件 windows form c# 自定义控件 时钟 控件 windows form c#
微信小程序表单自定义组件vest-form-master.zip
一步一步教你如何在jsf中自定义组件,简单易学,有程序完整代码。通过这个小demo你可以进一步开发复杂的组件。
1. Ext.form.NumberField 2. Ext.form.TextArea 3. Ext.form.TriggerField 4. Ext.form.DateField 5. Ext.form.ComboBox 6. Ext.form.TimeField
BUIW中Form&Widget构架分析
Ext.form.field.ComboBox结合Java、JSON实现AutoComplete
自定义winform 窗口标题栏 主要代码 public partial class ZForm : Form { private bool moving = false; private Point oldMousePosition; public new FormBorderStyle FormBorderStyle { get { return ...