Qual è l'equivalente di questa istruzione SQL in django?
SELECT * FROM table_name WHERE string LIKE pattern;
Come lo implemento in Django? Provai
result = table.objects.filter( pattern in string )
Ma non ha funzionato. Come lo implemento?
Qual è l'equivalente di questa istruzione SQL in django?
SELECT * FROM table_name WHERE string LIKE pattern;
Come lo implemento in Django? Provai
result = table.objects.filter( pattern in string )
Ma non ha funzionato. Come lo implemento?
Risposte:
Usa __contains
o __icontains
(senza distinzione tra maiuscole e minuscole):
result = table.objects.filter(string__contains='pattern')
L'equivalente SQL è
SELECT ... WHERE string LIKE '%pattern%';
%a%b%
.
result = table.objects.filter(string__contains='a').filter(string__contains='b')
ba
che LIKE %a%b%
non lo sarebbe.
contiene e icontains menzionati da falsetru fanno query come SELECT ... WHERE headline LIKE '%pattern%
Insieme a loro, potresti aver bisogno di questi con un comportamento simile: inizia con , istart con , finisce con , iendswith
fabbricazione
SELECT ... WHERE headline LIKE 'pattern%
o
SELECT ... WHERE headline LIKE '%pattern
result = table.objects.filter(string__icontains='pattern')
Ricerca senza distinzione tra maiuscole e minuscole per stringa in un campo.
Per preservare l'ordine delle parole come nell'istruzione sql LIKE '% pattern%' utilizzo iregex, ad esempio:
qs = table.objects.filter(string__iregex=pattern.replace(' ', '.*'))
i metodi stringa sono immutabili quindi la variabile del modello non cambierà e con. * cercherete 0 o più occorrenze di qualsiasi carattere tranne le linee di interruzione.
Utilizzando quanto segue per scorrere le parole del modello:
qs = table.objects
for word in pattern.split(' '):
qs = qs.filter(string__icontains=word)
l'ordine delle parole nel tuo pattern non sarà preservato, per alcune persone che potrebbero funzionare, ma nel caso di provare a imitare l'istruzione sql like userò la prima opzione.
Questo può essere fatto con le ricerche personalizzate di Django . Ho trasformato la ricerca in un'applicazione di ricerca simile a Django . Dopo l'installazione verrà abilitata la __like
ricerca con i caratteri jolly %
e _
.
Tutto il codice necessario nell'applicazione è:
from django.db.models import Lookup
from django.db.models.fields import Field
@Field.register_lookup
class Like(Lookup):
lookup_name = 'like'
def as_sql(self, compiler, connection):
lhs, lhs_params = self.process_lhs(compiler, connection)
rhs, rhs_params = self.process_rhs(compiler, connection)
params = lhs_params + rhs_params
return '%s LIKE %s' % (lhs, rhs), params
result = table.objects.filter(string__icontains='pattern')