Django F()函数通过数据库函数Extract()单独获取时间中的年月日

我们都知道Django支持F()对象使用加、减、乘、除、取模和幂运算等算术操作。
这里主要记录一下F()函数应用于时间类型的场景

1. 用于时间的处理。

比如修改时间,在原有时间上增加3天
from datetime import timedelta
User.objects.filter().update(mod_time=F("mod_time") + timedelta(days=3))

2. 用于时间单独取出年、月、日数字的操作

比如某个需求:

根据用户增加入职年数增加分数,每多1年加1分,则需要获取用户的入职时间的year,不能够直接用F("mod_time__year"),会报异常:django.core.exceptions.FieldError: Joined field references are not permitted in this query。
这里通过ExtractYear()方法获取F()函数的year,同理month和day一样使用ExtractMonth(),ExtractDay()获取。

from django.db.models.functions import ExtractYear
User.objects.filter(mod_time__year__lt=timezone.now().year,
                                    mod_time__month=timezone.now().month,
                                    mod_time__day=timezone.now().day).update(score=(timezone.now().year - ExtractYear(F("mod_time")))  + F("score"))
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容