Q 개체를 사용하여 검색어를 만들고 OR에 |
, AND에 &
을 사용합니다.
>>> from django.db.models import Q
>>> qs = Q(first_name__icontains='John A') | Q(last_name__icontains='John A')
>>> User.objects.filter(qs)
는 here
그것에 대해 더 추신 읽기 여러 필드
편집 귀하의 코멘트 파 등
을 통해 갈 때 모든, 당신은 또한 일반 검색어 세트
User.objects.filter(...) | User.objects.filter(...)
가입
|
및
&
을 사용할 수 있지만 나는 Q 개체를 사용하는 것은 단지 깔끔한 생각 당신이 원하는 것은 다음과 같습니다 :
>>> query = 'John A'
>>> fn, ln = query.split()
>>> User.objects.filter(first_name=fn, last_name=ln)
복잡한 상황의 경우 이름과 성을 확인하는 것이 좋습니다. 두 번째 것은 일반적으로 다른 이름의 중간 이름이거나 일부이므로, 그것을 유지할 것입니다. 이렇게 뭔가 :
매우 예쁘지는 않지만 성이 먼저 입력 된 곳을 포함하여 대부분의 경우에 잘 작동합니다. 그냥 당신이 내가 당신의 프로젝트에 맹목적으로 복사 여기가 아니라 무슨 짓을했는지 알고 있어야합니다 -
- 내가 문자열의 처음과 마지막 부분을 가져다가 내가 검색어 세트를 만들
- 을 fn을 각각 에선 그들에게 할당 firtcase
- 을 위해 그때
|
- 마지막으로 사용 반대 옵션에 대해 다른 검색어 세트에 합류, 그의 검색어에 필터링 가능한 중복 제거하는 별개의 사용
아마 많은 로직을 추가 할 수 있습니다. 예를 들어, 'John A'- 성은 분명히 약어이며 전체 이름이 아니고 첫 번째 이름은 전체 이름입니다. 이를 처리하고 그에 따라 쿼리 세트를 구현하는 로직을 구현할 수 있습니다 (은 startswith
또는 그 다음 간단한 비교입니다). Q 개체를 사용하면 쉽게 사용할 수 있습니다. 그걸로 놀아, 당신은 그것의 교수형을 얻을거야
'John A'을'first_name = 'John''과'last_name = 'A''로 분열 시키려고하십니까? – karthikr
예. 이것이 사용자 모델이 구현 된 방식입니다. first_name과 lat_name이 분리됩니다. 공백을 백엔드로 나눠 줄 것을 제안합니까? 두 분야 모두에서 더 많은 검색을 계획하고있었습니다. 검색 할 때 이름과 마지막 시간을 병합하는 등. 하지만 당신은 그 반대 일할 수있는 제안 : –