美文网首页
Django F()函数通过数据库函数Extract()单独获取

Django F()函数通过数据库函数Extract()单独获取

作者: 楠木cral | 来源:发表于2022-06-16 20:52 被阅读0次

    我们都知道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"))
    

    相关文章

      网友评论

          本文标题:Django F()函数通过数据库函数Extract()单独获取

          本文链接:https://www.haomeiwen.com/subject/riwqvrtx.html