2016-09-19 3 views
2

일부 HStoreField 특성을 가진 모델이 있는데 Django의 ORM HStoreField을 사용하여 LIKE를 사용하여 이러한 값을 쿼리 할 수 ​​없습니다.LIKE를 사용하여 Django의 HStoreField 값 쿼리

Model.objects.filter(hstoreattr__values__contains=['text']) 일의의 검색어는 hstoreattr정확히text 일치하는 모든 값을 가지고있는 행이 포함되어 있습니다.

text 대신 te을 검색하여 동일한 행을 검색하는 방법을 찾고 있습니다. 나는 이것이 원시 PostgreSQL 쿼리에서 가능하다는 것을 알고 있지만 Django ORM을 사용하는 솔루션을 찾고 있습니다.

+0

솔루션을 공유해 주시겠습니까? 감사. – zeck

답변

2

을 당신이 특정 키의 값을 확인하려면 이 '테'가 포함되어있는 경우 모든 개체, 당신은 할 수 있습니다 :

Model.objects.filter(hstoreattr__your_key__icontains='te') 

당신이 당신의 hstore 필드의 모든 키 '테'를 포함 있는지 확인하려면, 당신은 장고에 자신의 조회를 작성해야합니다, 왜냐하면 defaul 때문에 장고는 그런 일을하지 않을 것이다. 자세한 내용은 django 문서의 custom lookups을 참조하십시오.

+0

고마워, 사용자 지정 조회 할 것입니다. – lucasnadalutti

0

기억할 수있는 한, 값을 필터링 할 수 없습니다. 값을 필터링하려면 참조 할 열과 값을 전달해야합니다. 대/소문자를 구분하지 않으려면 __icontains을 사용하십시오.

모든 값으로 필터링 할 수는 없지만 모든 키로 필터링 할 수 있습니다. 코드에서 보여준 것처럼. 당신의이 'fo를'을 가정 해 봅시다라는 이름의 키에있는 모든 개체에서 '텍스트'를 검색 할 경우

- 그냥 같이 매끄러운 않습니다

Model.objects.filter(hstoreattr__icontains={'fo': 'text'})

+0

그래, 내가 질문에서 언급했듯이, 나는 이것을 할 수 있다는 것을 알고있다. 필요한 것은'Model.objects.filter (hstoreattr__values__icontains = [ 'te'])'를 수행하고 속성이'{ 'fo': 'text'}'인 행을 얻는 것입니다. LIKE를 사용하여 Postgres에서이 작업을 수행 할 수 있으므로 장고의 ORM을 사용하여 실제로이 작업을 수행 할 수 없다면 정말 슬플 것입니다. ( – lucasnadalutti

+0

정말 그렇게 생각하지 않습니다. 귀하의 hstore 키를 반복하고 그들을 통해 반복, 나중에 귀하의 querysets 체인 및 고유 한 개체를 가져 가라.하지만 그 시간이 오래 걸릴 수 있습니다 – sebb