Django 常见的操作符
在filter() 方法,exclude() 方法中使用大于,小于,模糊匹配等操作符。
常见的操作符如下:
操作符 | 含义 | 示例 |
= | 等于 | 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")) 这些操作符可以组合使用,以创建非常复杂和精确的查询。 |