Vom discuta despre modul in care cautarea poate fi realizata in Django REST Framework utilizand parametrul de interogare.
Sa folosim modelele de sondaje Django ca referinta.
Sa adaugam urmatorul serializator:
Sa adaugam urmatoarea vizualizare:
Sa adaugam urmatorul model url:
O solicitare GET catre / api / polls / questions / returneaza o lista cu toate intrebarile.
DRF ofera un filtru numit SearchFilter care poate filtra setul de intrebari pe baza unui parametru de interogare numit cautare.
Array
Vrem sa cautam intrebari care au Samsung in textul intrebarii.
Acest lucru necesita adaugarea a doua atribute in QuestionsAPIView. Acestea sunt campuri de cautare si filtre_backends. Sa adaugam aceste atribute.
Array
Faceti o solicitare GET cu parametrul de interogare de cautare Samsung. GET / api / polls / questions /? Search = Samsung.
Intrebarea cu termenul Samsung in intrebarea_text este returnata in raspuns.
Acum vrem sa gasim intrebari scrise de Charles .
Array
Sa facem o alta solicitare avand parametrul de interogare charles .
Nu am primit intrebarile scrise de Charles, deoarece avem doar question_text in search_fields. DRF cauta doar parametrul de interogare de cautare in question_text.
Trebuie sa adaugam si autorul in campurile de cautare daca dorim ca parametrul interogarii de cautare sa fie analizat in autor.
- porno maniac wwwherbalhealer.com
- porno ejac interne 1gays.net
- position porno www.holmesmurphy.net.nz
- porno classe lilyandmarshallselltheirstuff.com
- porno esclave qaquestions.com
- porno doux www.95thnewyorkinfantry.com
- snap porno francais voltsxamps.com
- porno comores www.sex24escort.com
- porno gwada phuket-tourism.com
- simpson bd porno ckj.mobi
- porno martinique gsmfilehosting.com
- plan a 3 porno 10dollarswonder.com
- porno gay ttbm resonancemusicstore.com
- porno trash ww17.alletess.com
- ilico porno iowabiodieselboard.net
- les plus belles actrices porno dino-musik.com
- babes porno genoa-umc.com
- porno jupe parkpass.com
- vierge porno www.bodylanguagetattoo.com
- film porno français en famille photohost.org
- porno rue routev8.com
- gyneco porno secondtype.com
Modificati campurile de cautare.
search_fields = [‘question_text’, ‘author’]
Faceti din nou cerere API si ar trebui sa vedeti raspunsul la intrebarea de autor Charles.
Intrebarea are multe relatii cu Choice. Sa cream o intrebare cu o alegere asociata.
In [1]: din polls.models import Intrebare, ChoiceIn [2]: q = Question.objects.create (question_text = ‘Cine este personajul tau preferat GoT?’) In [3]: Choice.objects.create (question = q, choice_text = ‘Ned’)
Out [3]: <Choice: Ned>
Dorim sa fie luate in considerare si alegerile asociate, atunci cand cautam un anumit termen. Cautati Ned in punctul final al intrebarilor.
Nu am obtinut niciun rezultat.
Intrucat dorim sa fie luate in considerare choice_text cu alegeri asociate, ar trebui sa adaugam choice__choice_text in campurile_de cautare.
search_fields = [‘question_text’, ‘author’, ‘choice__choice_text’]
Cautati din nou Ned si ar trebui sa vedeti intrebarea relevanta in raspunsul returnat.
Sa revenim la campurile de cautare inapoi la [‘intrebare_text’, ‘autor’].
In culise, DRF utilizeaza icontains in mod implicit. Cautati GoT.
DRF a aplicat in esenta urmatorul filtru:
Q (question_text__icontains = ‘GoT’) | Q (author__icontains = ‘GoT’)
S-ar putea sa doriti sa impuneti ca un obiect sa fie returnat numai daca incepe cu textul cautat. In acest caz, filtrarea necesara va fi initiata in loc de icontainere.
DRF SearchFilter are si suport pentru istartswith. Trebuie sa prelungim ^ campul pentru istartswith. Schimbati campurile de cautare in:
search_fields = [‘^ question_text’, ‘author’]
Cautarea GoT nu ar intoarce nicio intrebare in raspuns acum.
Cautati cine si veti vedea intrebarea ca raspuns.
DRF sub capota a efectuat urmatorul filtru in acest caz
Q (question_text__istartswith = ‘Cine’) | Q (author__icontains = ‘Cine’)
Cautarea exacta poate fi efectuata prin prelungirea @ in numele atributului. ex: search_fields = [‘@ question_text’, ‘@author’].
Sa revenim la campurile de cautare inapoi la [‘intrebare_text’, ‘autor’].
DRF accepta mai multi termeni in parametrul de interogare de cautare. Dupa cum se arata in documentatia DRF:
Parametrul de cautare poate contine mai multi termeni de cautare, care ar trebui sa fie separati intre spatii si / sau virgula. Daca sunt folositi mai multi termeni de cautare, atunci obiectele vor fi returnate in lista numai daca toti termenii furnizati se potrivesc.
Sa trimitem doi termeni Who si GoT in parametrul de cautare.
Pentru ca ambii termeni se afla in intrebarea Cine este personajul tau preferat GoT? , deci acest obiect este returnat in lista.
Cautati termenii Cine si Samsung.
Deoarece ambii termeni nu apar in niciuna dintre intrebari, asa ca am primit o lista goala in raspuns.
Urmatoarea mea postare vorbeste despre implementarea filtrelor dinamice in DRF.
Conecteaza-te cu mine pe Twitter, trimit un tweet despre articole si sfaturi de programare informative si valoroase.








