2013-03-29 13 views
10

Ho un modello con un campo di testo. Voglio fare una ricerca che restituirà tutti gli elementi che hanno una stringa con una lunghezza di 7 o più in quel campo. Possibile?Django: Ricerca per lunghezza del campo di testo

Come su una ricerca per tutti gli oggetti in cui tale campo non è ''?

risposta

14

Penso ricerca regex può aiutare:

ModelWithTextField.objects.filter(text_field__iregex=r'^.{7,}$') 

o si può sempre eseguire query SQL prime sui Django modello:

ModelWithTextField.objects.raw('SELECT * FROM model_with_text_field WHERE LEN_FUNC_NAME(text_field) > 7') 

dove len_func_name è il nome della funzione di "lunghezza della stringa" per il tuo DBMS. Ad esempio in mysql si chiama "length".

+0

approccio Nizza con la regex! –

+0

Mi chiedo, è l'SQL per il controllo della lunghezza disponibile tramite l'ORM Django? –

+1

Suppongo di no. Ho trovato questa domanda: [link] (http://stackoverflow.com/questions/12314168/django-filter-on-the-basis-of-text-length), e lì un'altra buona decisione per archiviare la lunghezza in una colonna separata, è modo migliore per le prestazioni. – spacetekk

3

Dal Django 1.8, è possibile utilizzare la funzione Length database:

from django.db.models.functions import Length 
qs = ModelWithTextField.objects \ 
     .annotate(text_len=Length('text_field_name')) \ 
     .filter(text_len__gte=7) 
Problemi correlati