- 참고: 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을 직접 쓰고 싶다면 이런식으로 쓰는 것도 방법입니다. 하지만 추천하지 않습니다.

반응형