- 참고: stackoverflow.com/questions/12314168/django-filter-on-the-basis-of-text-length
모델에서 어떤 필드의 길이가 10글자 이상인 객체들만 갖고오는 방법을 생각해봅시다.
from django.db.models.functions import Length
qs = MyModel.objects.annotate(text_len=Length('text_field_name')).filter(
text_len__gt=10)
이런식으로 functions의 Length를 활용하면 됩니다. (장고1.8 이상)
보통은 잘 안쓰는 함수인데.. 쓸 일이 있네요.
MySQL의 경우 CHAR_LENGTH() 함수를 쓰고, 다른 DB는 보통 LENGTH()를 사용하는데 이걸 장고에서 래핑해놓은 겁니다.
MyModel.objects.extra(where=["CHAR_LENGTH(text) > 300"])
extra로 SQL을 직접 쓰고 싶다면 이런식으로 쓰는 것도 방법입니다. 하지만 추천하지 않습니다.
반응형
'프로그래밍 > Python' 카테고리의 다른 글
[Django] PyCharm으로 장고 커맨드 디버그하는 법 (0) | 2021.03.07 |
---|---|
[Python] 파이썬 변수, 메소드명 언더스코어(_) 의미 (0) | 2021.03.06 |
[Django] Proxy model도 마이그레이션이 필요하다 (0) | 2021.02.20 |
[Django] 모델의 clean()이 자동으로 호출되지 않는 이유 (0) | 2021.02.12 |
[Django] queryset을 합치면서 순서도 보존하는 방법 (2) | 2021.01.23 |