我们都知道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"))
网友评论