2016-06-13 3 views
-1

말에 포함되어 있는지 확인하는 필터를 사용하는 방법, 나는 텍스트 필드와 모델을 가지고장고, 문자열 필드가 매개 변수

results = SomeModel.objects.filter(keyword_icontains=querystring).all() 

내가 누구의 필드 값에 포함 된 개체를 필터링 할 방법 django docs

질문에서 발견 : 변수 "쿼리 문자열은"필드 키워드에 포함 쿼리 문자열 변수?

제 질문이 혼란 스러우면 사과드립니다 ... 예를 들어 설명해 드릴 수 있습니다 ... django docs에서 'python-django'와 같은 키워드 입력란에 'django '내가

results=SomeModel.objects.filter(keyword_icontains=querystring).all() 
or results=SomeModel.objets.filter(keyword_icontains='django').all() 

에 해당 필드가 들어있는 개체를 추출하지만 말할 수있다, 나는 누구의 키워드 필드 쿼리 문자열에 포함 된 모든 행/객체를 추출 할? 예를 들어, 쿼리 문자열에 'In django가 포함되어 있으면 필터를 어떻게 만듭니 까?' 결과에 키워드 필드의 값이 'django', 'filter'등 인 모든 객체가 결과에 포함되기를 원합니다 ...

+1

필드가 포함 된 querystring? 모델의 필드 이름을 포함하는 쿼리 문자열의 값 에서처럼? –

+0

@RajeshYogeshwar, 모델의 필드 값을 포함하는 쿼리 문자열의 값처럼 ... – RVC

+0

'querystring'이 실제로 "querystring"문자열이 아닌 한, 현재 예제가 올바르지 않습니다. 그리고 나서 SQL 상응하는 것은'SELECT ... WHERE 키워드 IKE '% querystring %''입니다. 아마, 그것은 당신의 질문이 무엇인지에 대한 혼란을 야기 할 수 있으며, 그럴 가능성이 있습니다. – Evert

답변

1

"단어"의 정의에 따라 입력을 분할해야합니다. , 그리고 그 결과를 반복하여 다양한 결과 queryset을 연결합니다 (대부분 비어있을 가능성이 있습니다).

는 모든 문자와 아포스트로피 잡기, 정규식을 사용할 수, 분할하려면 (하지만 당신은 스마트 인용, 사람이 사용하는 경우 그 대신 표준 ASCII 아포스트로피의 입력으로 그리울거야)

words = re.split(r"[^A-Za-z']+", querystring) 

그런 다음 루프 필터 :

query = Q() # empty Q object 
for word in words: 
    # 'or' the queries together 
    query |= Q(keyword_icontains=word) 
results = SomeModel.objects.filter(query).all() 

위의 코드는 테스트되지 않은, 그리고 내가 생각이있어에 '또는'쿼리 및 this answer에서 빈 Q(). (this answer에 따라, 예를 들어, itertools.chain를 사용하여) 당신을 위해 잘 작동하는 results 목록에 추가, 각 루프 단계에서 직접 쿼리를 평가, 당신의 다음 단계 (들)에 있습니다 따라

.