Django存放无年份日期的字段。
django-yearlessdate的Python项目详细描述
为不包含年份的日期提供django模型和表单字段。
一个用例是收集生日而不需要出生年份。
先决条件
- Django 1.8-1.11,2.0
- Python2.7,3.6
(其他版本可能起作用,但未经测试。)
安装
pip install django-yearlessdate
用法
包提供了两个模型字段,YearlessDateField和YearField。
年份sDatefield
YearlessDateField存储没有年份的日期:例如,一月一日
它的默认小部件由两个下拉列表组成,一个用于一天,一个用于一个月。
它只允许潜在的有效日期。例如,用户将无法设置 截止4月31日。2月29日为有效日期。
下面是一个示例models.py,它声明了一个具有必需的无年份日期的模型:
from django.db import models from djangoyearlessdate.models import YearlessDateField class MyModel(models.Model): birthday = YearlessDateField()
模型实例上YearlessDateField的值可以如下访问:
>>> a = MyModel.objects.get(id=1) >>> a <MyModel: 4 August 2011> >>> a.birthday.day 4 >>> a.birthday.month 8 >>> print a.birthday 4 August
它们也可以按预期进行比较或排序,例如:
>>> m = MyModel.objects.all() >>> m [<MyModel: 4 August 2011>, <MyModel: 30 June 2013>] >>> m[0].birthday > m[1].birthday True >>> m.order_by('birthday') [<MyModel: 30 June 2013>, <MyModel: 4 August 2011>]
年份字段
YearField是一个非常简单的模型字段,它将年份存储为整数, 并确保所提供的年份介于1900和2200之间:
from django.db import models from djangoyearlessdate.models import YearField class MyModel(models.Model): year = YearField(null=True, blank=True)
不建议使用YearField是,因为它缺乏可配置性。 几乎可以肯定,在组合中使用SmallIntegerField会更好 有一个MinValueValidator和一个MaxValueValidator。
运行测试
设置
- 确保安装了最新版本的tox
- 克隆此回购协议。
运行测试
从本回购协议的根目录中,只需运行:
tox