Hướng Dẫn Toàn Tập Các Toán Tử Lookup Trong Django ORM

Views: 26 16/04/2026 09:24
Hướng Dẫn Toàn Tập Các Toán Tử Lookup Trong Django ORM

Trong quá trình phát triển web với Django, việc truy vấn dữ liệu hiệu quả là kỹ năng sống còn. Django cung cấp một công cụ cực kỳ mạnh mẽ gọi là Field Lookups. Đây chính là cách bạn tạo ra các câu lệnh WHERE trong SQL một cách linh hoạt chỉ bằng code Python.

1. Cú pháp cơ bản của Field Lookups

Trong Django ORM, các toán tử lookup luôn đi sau tên trường và được ngăn cách bởi hai dấu gạch dưới (__):

Model.objects.filter(field__lookuptype=value)

2. Bảng Tổng Hợp Các Toán Tử Lookup Phổ Biến

Dưới đây là bảng tra cứu nhanh các toán tử bạn sẽ thường xuyên sử dụng trong các dự án thực tế:

Toán tử

Ý nghĩa

Ví dụ (Django ORM)

Tương ứng SQL

exact

Khớp chính xác (mặc định)

name__exact='Django'

= 'Django'

iexact

Khớp chính xác (không phân biệt hoa/thường)

name__iexact='django'

LIKE 'django'

contains

Chứa chuỗi (phân biệt hoa thường)

title__contains='Web'

LIKE BINARY '%Web%'

icontains

Chứa chuỗi (không phân biệt hoa thường)

title__icontains='web'

LIKE '%web%'

in

Nằm trong một danh sách

id__in=[1, 5, 10]

IN (1, 5, 10)

gt

Lớn hơn (Greater than)

price__gt=100

> 100

gte

Lớn hơn hoặc bằng

price__gte=100

>= 100

lt

Nhỏ hơn (Less than)

stock__lt=10

< 10

lte

Nhỏ hơn hoặc bằng

stock__lte=10

<= 10

startswith

Bắt đầu với...

code__startswith='APP'

LIKE 'APP%'

endswith

Kết thúc với...

email__endswith='.com'

LIKE '%.com'

range

Nằm trong khoảng

date__range=(start, end)

BETWEEN ... AND ...

isnull

Kiểm tra giá trị NULL

deleted_at__isnull=True

IS NULL

regex

Khớp biểu thức chính quy

phone__regex=r'^\d{10}$'

REGEXP ...


3. Truy vấn nâng cao với DateTime

Django cho phép bạn "mổ xẻ" các trường ngày tháng cực kỳ đơn giản mà không cần dùng hàm SQL phức tạp:

  • year: pub_date__year=2026 (Lọc theo năm)

  • month: pub_date__month=4 (Lọc theo tháng)

  • day: pub_date__day=16 (Lọc theo ngày)

  • week_day: pub_date__week_day=2 (Lọc theo thứ trong tuần)

4. Một số lưu ý để tối ưu hiệu suất (Tips)

  1. Dấu gạch dưới kép (__): Lỗi phổ biến nhất là chỉ dùng một dấu gạch dưới. Hãy luôn nhớ dùng hai dấu để Django nhận diện đúng toán tử.

  2. Toán tử i (Ignore Case): Các toán tử như icontains, iexact rất tiện lợi nhưng có thể làm chậm tốc độ truy vấn trên các bảng dữ liệu lớn (Big Data). Nếu có thể, hãy chuẩn hóa dữ liệu về chữ thường trước khi lưu.

Kết hợp nhiều điều kiện: Bạn có thể dùng Q objects để thực hiện các phép toán phức tạp như OR, NOT:

from django.db.models import Q
# Tìm bài viết có tag là 'Python' HOẶC 'Django'
Post.objects.filter(Q(tag='Python') | Q(tag='Django'))

Việc nắm vững các toán tử Lookup giúp bạn viết code sạch hơn, dễ bảo trì và tận dụng tối đa sức mạnh của Django ORM. Hy vọng bảng tổng hợp này sẽ giúp ích cho các bạn trong quá trình coding hàng ngày!

Chúc các bạn thành công

truy vấn database django django filter examples lập trình python django tối ưu ORM django Django Field Lookups Toán tử lookup Django Django ORM Query