backend/django

Django: Filter with CharField length

seul chan 2018. 7. 26. 21:30

Use Length

from django.db.models.functions import Length

qs = queryset.annotate(text_len=Length('text_field')).filter(text_len__gt=10)

Only can use Django >= 1.8

Use extra

qs = queryset.extra(where=["CHAR_LENGTH(text_field) > 10"])

Use regex inside filter

qs = queryset.filter(text_field__regex=r'.{10}.*')

Register Length to CharField lookup

from django.db.models import CharField
from django.db.models.functions import Length

CharField.register_lookup(Length, 'length')

qs = queryset.filter(text_field__length__gt=10)

Only can use Django >= 1.9