Django使用DateUtil.RelativeDelta替代DurationField

django-relativedelta的Python项目详细描述


https://travis-ci.org/CodeYellowBV/django-relativedelta.svg?branch=master

dateutil.relativedelta.relativedelta类的django字段, 方便地映射到PostgresQL INTERVAL type

标准的Django DurationField 映射到Python’s datetime.timedelta,其中 支持几天几周,但不是几年几个月。如果您试图读取包含 不管怎样,每个月的信息都会丢失,因为每个月都会转换为30天。

当你需要储存付款间隔时,你应该使用这个包裹 (倾向于每月或每季度)、出版间隔(包括 可以是每周,也可以是每月)等等,或者当你不 知道间隔是什么,想提供一些 灵活性。

如果要使用更高级的定期日期,应考虑 使用django-recurrence 相反。这映射到dateutil.rrule.rrule 类,但它不使用本机数据库字段类型,因此您不能 在数据库中对它们执行运算。

用法

使用字段很简单。您可以将字段添加到 这样的模型:

fromdjango.dbimportmodelsfromrelativedeltafieldimportRelativeDeltaFieldclassMyModel(models.Model):rdfield=RelativeDeltaField()

然后,您可以使用它:

fromdateutil.relativedeltaimportrelativedeltard=relativedelta(months=2,days=1,hours=6)my_model=MyModel(rdfield=rd)my_model.save()

或者,也可以将字符串与 ISO8601 “format with designators” time interval syntax

fromdateutil.relativedeltaimportrelativedeltamy_model=MyModel(rdfield='P2M1DT6H')my_model.save()

为了方便起见,标准pythondatetime.timedelta对象是 也接受:

fromdatetimeimporttimedeltatd=timedelta(days=62,hours=6)my_model=MyModel(rdfield=td)my_model.save()

full_clean()之后,对象将始终转换为 _规范化的{tt4}$实例。强烈推荐 使用django-fullclean 应用程序总是在save()上强制full_clean(),因此您可以 确保在save()之后,您的字段都是规范化的 并经过验证。

限制和陷阱

由于此字段由INTERVAL列支持,因此 支持相对的weekdayleapdaysyeardaynlyearday参数,也不是绝对参数yearmonthdayhoursecondmicrosecond

microseconds字段被转换为小数seconds 值,这可能会由于浮点而导致某些精度损失 代表。

weeks字段是“virtual”,派生自7的倍数 天。因此,输入间隔规范中的任何周值都是 转换为天并添加到间隔的days字段中。 当序列化回字符串时,将永远不会写入周。 同样,如果间隔包含7天的倍数,则可以读取 这是从weeks属性返回的。

不支持PostgreSQL以外的数据库。

出于一致性原因,当relativeDelta对象被分配给 relativeDeltafield,它自动调用normalized()on full_clean。这样可以确保数据库表示为 尽可能类似于relativeDelta(例如,分数 天总是转换成小时)。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java Hibernate@ManyToMany mapping只在一个方向上在数据库中添加记录   java将文件上载到tomcat服务器外部的文件夹   java将摄像头捕获的图像上传到服务器   java如何创建Rest API并为进程添加时间延迟?   springmodulesvalidation0中缺少java注释包。8a源文件   如何在java中打印SOAP头   Spring security中的java自定义消息,包括UserDetailsService实现和异常   java如何使用Htmlunit中的表单数据登录站点   web如何在WildFly上自动运行java文件   java如何从已经使用另一个方法传递的参数的方法中获取返回值?   java我在JFrame上有一个索引越界。setContentPane   java中的循环序列/系列打印   java maven 3 webapp没有要运行的测试吗?   java CORS不允许POST请求   java再次在派生类中的Jackson中添加字段,该字段在基类中被忽略   爪哇坑测试显示仆从由于超时而异常退出   java寻找第10001个素数   java jboss是否更改web应用程序上下文根?