在 Django ORM(以及 Django Filter / QuerySet API)中,
针对字段的比较操作(>、<、>=、<=、= 等)
都是通过 "字段查询表达式(Field lookup expressions)" 来实现的。
🔤 一、Django ORM 比较运算符对照表
比较运算 | 含义 | Django 查询关键字(lookup) | 示例 |
---|---|---|---|
= |
等于 | exact (或直接省略) |
price__exact=100 或 price=100 |
> |
大于 | gt (greater than) |
price__gt=100 |
< |
小于 | lt (less than) |
price__lt=100 |
>= |
大于等于 | gte (greater than or equal) |
price__gte=100 |
<= |
小于等于 | lte (less than or equal) |
price__lte=100 |
!= |
不等于 | exclude(price__exact=100) 或 ~Q(price=100) |
不直接支持 ne |
区间 | 在范围内 | range |
price__range=(50, 100) |
模糊匹配 | 包含(不区分大小写) | icontains |
name__icontains='pump' |
模糊匹配 | 开头匹配(不区分大小写) | istartswith |
name__istartswith='acid' |
模糊匹配 | 结尾匹配(不区分大小写) | iendswith |
name__iendswith='valve' |
空值判断 | 为空 | isnull=True |
date__isnull=True |
不为空 | 非空 | isnull=False |
date__isnull=False |
集合判断 | 属于列表 | in |
status__in=['new','done'] |
🧩 二、示例:在 ORM 查询中使用
python
from warehouse.models import Item
# 大于
Item.objects.filter(price__gt=100)
# 小于等于
Item.objects.filter(stock__lte=500)
# 在范围内
Item.objects.filter(created_at__range=('2025-10-01', '2025-10-09'))
# 等于(完全匹配)
Item.objects.filter(name__exact='Pump-A')
# 模糊匹配
Item.objects.filter(name__icontains='pump')
# 不等于
Item.objects.exclude(price__exact=0)
🧠 三、在 django-filter 中使用这些运算符
你可以让前端用这些"比较字母"来动态传参:
python
import django_filters
from .models import Item
class ItemFilter(django_filters.FilterSet):
price = django_filters.NumberFilter(field_name='price', lookup_expr='exact')
price_gt = django_filters.NumberFilter(field_name='price', lookup_expr='gt')
price_lt = django_filters.NumberFilter(field_name='price', lookup_expr='lt')
price_gte = django_filters.NumberFilter(field_name='price', lookup_expr='gte')
price_lte = django_filters.NumberFilter(field_name='price', lookup_expr='lte')
class Meta:
model = Item
fields = ['price']
📘 示例请求:
/api/items/?price_gt=100&price_lte=500
🧱 四、简写记忆口诀:
运算符 | Django 写法 | 英文含义 |
---|---|---|
> |
gt |
greater than |
< |
lt |
less than |
>= |
gte |
greater than or equal |
<= |
lte |
less than or equal |
= |
exact |
exactly equal |