秒读
Django
Django
Django 中的 F()
0X00 内容比较少,不分标题
我们对Django中的model进行查询时通常是某个字段和一个常量对比,比如下面这种写法
Student.objects.filter(name='shawn')
Student.objects.filter(age=233)
Student.objects.filter(gender__in=('F', 'M'))
如果遇到高级的查询可能会使用Q()
查询,不过也只是进行多个条件的查询
Student.objects.filter(
Q(name='shawn') | Q(gender='M')
)
Student.objects.filter(
Q(gender='F') | ~Q(age=233)
)
这里是我的另一篇介绍Q()的博文。
但是如果有这样一个需求:”查询订单中结束时间和开始时间的间隔大于45分钟的“。那应该怎么办的?因为订单的开始时间和结束时间都是一个字段,我们需要对比同一条数据中的两个字段。这时候可以使用F()
来查询。
import datetime
from django.db.models import F
from my_project.models.Order
forty_five_minutes = datetime.timedelta(minutes=45)
Order.objects.filter(end_time__gt=F('start_time') + forty_five_minutes) # 查询结束时间大于开始时间加上45分钟的订单
Order.objects.filter(operator__age__lte=F('client__age')) # 查询订单操作员年龄小于等于客户的(我也不知道有啥用,例子而已)
one_second = datetime.timedelta(seconds=1)
OldMan.objects.filter(age__gt=F('age') + one_second) # 查询年龄比自己年龄多1S的大人?哈哈哈
本段内容的官方文档:https://docs.djangoproject.com/en/2.1/ref/models/expressions/#f-expressions
本段内容的另一篇博客:https://www.cnblogs.com/liuq/p/5946803.html
感谢您的支持
如果您喜欢这篇文章,可以通过以下方式支持我:






评论区