답변:
사용 __contains
또는 __icontains
(대소 문자 구분) :
result = table.objects.filter(string__contains='pattern')
동등한 SQL은 다음과 같습니다.
SELECT ... WHERE string LIKE '%pattern%';
%a%b%
.
result = table.objects.filter(string__contains='a').filter(string__contains='b')
ba
어떤이 LIKE %a%b%
없다.
falsetru가 언급 한 포함 및 icontains SELECT ... WHERE headline LIKE '%pattern%
그들과 함께 유사한 동작을 가진 다음이 필요할 수 있습니다 : startswith , istartswith , endswith , iendswith
만들기
SELECT ... WHERE headline LIKE 'pattern%
또는
SELECT ... WHERE headline LIKE '%pattern
result = table.objects.filter(string__icontains='pattern')
필드의 문자열에 대한 대소 문자를 구분하지 않는 검색.
sql LIKE '% pattern %'문에서와 같이 단어의 순서를 유지하기 위해 iregex를 사용합니다. 예를 들면 다음과 같습니다.
qs = table.objects.filter(string__iregex=pattern.replace(' ', '.*'))
문자열 메서드는 불변이므로 패턴 변수는 변경되지 않으며. *를 사용하면 문자가 0 개 이상 발생하지만 줄 바꿈이 없습니다.
다음을 사용하여 패턴 단어를 반복합니다.
qs = table.objects
for word in pattern.split(' '):
qs = qs.filter(string__icontains=word)
패턴의 단어 순서는 보존되지 않을 것입니다. 어떤 사람들은 작동 할 수 있지만 SQL like 문을 모방하려는 경우 첫 번째 옵션을 사용합니다.
이것은 Django의 사용자 정의 조회 로 수행 할 수 있습니다 . 나는 조회를 장고와 같은-조회 응용 프로그램 . 설치 후 및 와일드 카드를 __like
사용한 조회 가 활성화됩니다.%
_
애플리케이션에 필요한 모든 코드는 다음과 같습니다.
from django.db.models import Lookup
from django.db.models.fields import Field
@Field.register_lookup
class Like(Lookup):
lookup_name = 'like'
def as_sql(self, compiler, connection):
lhs, lhs_params = self.process_lhs(compiler, connection)
rhs, rhs_params = self.process_rhs(compiler, connection)
params = lhs_params + rhs_params
return '%s LIKE %s' % (lhs, rhs), params
result = table.objects.filter(string__icontains='pattern')