Django Postgres ArrayField를 사용하고 있습니다.
response_headers = ArrayField(models.TextField(blank=True),blank=True,null=True,default=list)
객체에 다음 데이터가 있다고 가정 해 보겠습니다.
obj1 : response_headers = ["dubai","sydney","nyc"]
obj2 : response_headers = ["mumbai","kerela","dubai"]
MyModel.objects.filter(response_headers__contains=['dubai']
반환 obj1
및 obj2
하지만,
MyModel.objects.filter(response_headers__contains=['duba']
or
MyModel.objects.filter(response_headers__contains=['uba']
어떤 개체도 반환하지 않습니다 <QuerySet []>
ArrayField의 모든 인덱스에서 부분 패턴으로 검색하는 기능을 어떻게 얻을 수 있습니까?
예, 정확한 요소 일치 만 가능합니다.
MyModel.objects.filter(response_headers__contains=['duba'])
postgresql 포함 @>
연산자를 사용하여 정확히 일치 검색을 수행 합니다.
그러나 ArrayField에 간단한 문자열 만 포함 된 경우 적합 할 수있는 해키 옵션이 있습니다.
MyModel.objects.filter(response_headers__icontains='duba')
이것은 ArrayField
텍스트로 캐스팅 하고 대문자로하고 LIKE '%DUBA%'
.
따라서 배열에 'duba'와 같은 요소 (i)가 있는지 확인하지 않고 배열을 하나의 문자열로 변환합니다 (요소가 단순 문자열이 아닌 경우 결과가 바람직하지 않을 수 있음)-즉 {dubai,sydney,nyc}
, 대소 문자를 구분하지 않는 일치를 수행합니다. 그것의 인수와 함께 duba
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다