Django 常见的操作符

07-11 1362阅读

在filter() 方法,exclude() 方法中使用大于,小于,模糊匹配等操作符。

Django 常见的操作符
(图片来源网络,侵删)

常见的操作符如下:

操作符含义示例
=等于Book.objects.filter(price=10)
!= 或 __ne不等于用于查找字段不等于特定值的记录。但更常用exclude()方法。
__gt大于用于查找字段大于特定值的记录Book.objects.filter(price__gt=10)
__gte大于等于Book.objects.filter(price__gte=10)
__lt小于

用于查找字段小于特定值的记录。

Book.objects.filter(price__lt=10)

__lte小于等于

用于查找字段小于等于特定值的记录。

Book.objects.filter(price__lte=10)

__in在某个列表内

你想要获取所有作者在列表中的书籍,你可以使用__in这将返回一个QuerySet,其中包含了所有作者为 '小强' 或 '小龙' 的书籍。

authors = ['小强', '小龙']

books = Book.objects.filter(author__in=authors)

__contains包含

用于查找字段包含特定子字符串的记录。

Book.objects.filter(title__contains="Python")

__icontains不包含

用于查找字段不包含特定子字符串的记录。注意,

__icontains是不区分大小写的。

Book.objects.exclude(title__icontains="Python")

__startswith以...开始

用于查找字段以特定字符串开始的记录。

Book.objects.filter(title__startswith="Python")

__endswith以...结束

用于查找字段以特定字符串结束的记录。

Book.objects.filter(title__endswith="Book")

__exact精确匹配

用于查找字段等于特定值的记录。这与直接使用

=是等价的。

Book.objects.filter(title__exact="Python Cookbook")

__regex

__iregex

模糊匹配

用于使用正则表达式匹配字段的记录。

__regex

区分大小写,

__iregex

不区分大小写。

Book.objects.filter(title__iregex=r"Python.*")

__year日期字段的年份

假设你有一个Post模型,其中包含一个created_at字段,类型为DateTimeField。如果你想获取所有在2023年创建的帖子,你可以使用__year这将返回一个QuerySet。

posts=Post.objects.filter(created_at__year=2023)

__month日期字段的月份假设你有一个Sales模型,其中包含一个sale_date字段,类型为DateTimeField或DateField

。如果你想获取所有在6月份的销售记录,你可以使用__month操作符如下:这将返回一个QuerySet,其中包含了所有在6月份的销售记录。

from myapp.models import Sales

sales_in_june = Sales.objects.filter(sale_date__month=6)

__day日期字段的天数

假设你有一个Event模型,其中包含一个event_date字段,类型为DateTimeField或DateField。如果你想获取所有在15号发生的事件,你可以使用__day

操作符如下:这将返回一个QuerySet,其中包含了所有在每个月的15号发生的事件。

from myapp.models import Event

events_on_15th = Event.objects.filter(event_date__day=15)

__week_day获取指定周日之前的数据假设你有一个LogEntry模型,其中包含一个timestamp字段,类型为DateTimeField。如果你想获取所有在星期五发生的日志条目,你可以使用__week_day操作符如下:这将返回一个QuerySet,其中包含了所有在星期五发生的日志条目。请注意,Django中的星期几是以1开始的,即1表示星期一,7表示星期日。

from myapp.models import LogEntry

entries_on_friday = LogEntry.objects.filter(timestamp__week_day=5)

__hour获取指定区间小时的数据

假设你有一个ActivityLog模型,其中包含一个timestamp字段,类型为DateTimeField

。如果你想获取所有在上午10点到11点之间发生的活动记录,你可以使用__hour操作符如下:这将返回一个QuerySet,其中包含了所有在上午10点到11点之间发生的活动记录。

from myapp.models import ActivityLog

activities_in_morning = ActivityLog.objects.filter(timestamp__hour__gte=10, timestamp__hour__lt=11)

__minute获取指定区间分的数据

假设你有一个SystemLog模型,其中包含一个timestamp字段,类型为DateTimeField

。如果你想获取所有在下午2点30分到2点35分之间发生的系统日志记录,你可以使用

__minute操作符如下:这将返回一个QuerySet,其中包含了所有在下午2点30分到2点35分之间发生的系统日志记录。

from myapp.models import SystemLog

logs_in_time_window = SystemLog.objects.filter(timestamp__hour=14, timestamp__minute__gte=30, timestamp__minute__lt=35)

__second获取指定秒的数据

假设你有一个Trade模型,其中包含一个timestamp字段,类型为DateTimeField。如果你想获取所有在某个特定秒数内发生的交易记录,你可以使用__second操作符如下:这将返回一个QuerySet,其中包含了所有在10点30分15秒发生的交易记录。

from myapp.models import Trade

trades_in_second = Trade.objects.filter(timestamp__hour=10, timestamp__minute=30, timestamp__second=15)

&   ,   |

 

查询多个条件

使用Q对象,可以使用逻辑“与”(&)和“或”(|)操作符来组合多个查询条件

from django.db.models import Q

Book.objects.filter(Q(price__gt=10) & Q(title__icontains="Python"))

这些操作符可以组合使用,以创建非常复杂和精确的查询。

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]