Để duy trì thứ tự của các từ như trong câu lệnh sql LIKE '% pattern%', tôi sử dụng iregex, ví dụ:
qs = table.objects.filter(string__iregex=pattern.replace(' ', '.*'))
các phương thức chuỗi là bất biến vì vậy biến mẫu của bạn sẽ không thay đổi và với. * bạn sẽ tìm kiếm 0 hoặc nhiều lần xuất hiện của bất kỳ ký tự nào trừ các dòng ngắt.
Bằng cách sử dụng phần sau để lặp lại các từ mẫu:
qs = table.objects
for word in pattern.split(' '):
qs = qs.filter(string__icontains=word)
Thứ tự của các từ trong mẫu của bạn sẽ không được giữ nguyên, đối với một số người có thể hoạt động nhưng trong trường hợp cố gắng bắt chước câu lệnh sql like, tôi sẽ sử dụng tùy chọn đầu tiên.
result = table.objects.filter(string__icontains='pattern')