0X00 内容比较少,不分标题
我们对Django中的model进行查询时通常是某个字段和一个常量对比,比如下面这种写法
1 2 3
| Student.objects.filter(name='shawn') Student.objects.filter(age=233) Student.objects.filter(gender__in=('F', 'M'))
|
如果遇到高级的查询可能会使用Q()
查询,不过也只是进行多个条件的查询
1 2 3 4 5 6
| Student.objects.filter( Q(name='shawn') | Q(gender='M') ) Student.objects.filter( Q(gender='F') | ~Q(age=233) )
|
这里是我的另一篇介绍Q()的博文。
但是如果有这样一个需求:”查询订单中结束时间和开始时间的间隔大于45分钟的“。那应该怎么办的?因为订单的开始时间和结束时间都是一个字段,我们需要对比同一条数据中的两个字段。这时候可以使用F()
来查询。
1 2 3 4 5 6 7 8 9 10 11
| 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) Order.objects.filter(operator__age__lte=F('client__age'))
one_second = datetime.timedelta(seconds=1) OldMan.objects.filter(age__gt=F('age') + one_second)
|
本段内容的官方文档:https://docs.djangoproject.com/en/2.1/ref/models/expressions/#f-expressions
本段内容的另一篇博客:https://www.cnblogs.com/liuq/p/5946803.html