Ho un modello di django, chiamato "Utente" che memorizza alcune informazioni di base sulle persone, vale a dire il nome e il cognome. Al momento ho una semplice ricerca sul mio modello di django in cui, se un utente digita il nome primo, The django queryset restituisce le prime 10 corrispondenze, ordinate per ultimo nome.Restituisci corrispondenze esatte in cima a Django Queryset
Per esempio, attualmente, se si cerca "Sam" si potrebbe ottenere i seguenti risultati:
- Sam Abbott
- Samuel Baker
- Sammy Rogers
- Sam Simmons
Il codice per questo è semplice:
User.objects.filter(Q(first__istartswith=token)).order_by('last')
Tuttavia, desidero modificare questo in modo che vengano restituite tutte le corrispondenze esatte per il nome , seguite dal resto dei risultati. Quindi, se qualcuno digita "sam", i risultati dovrebbero essere invece:
- Sam Abbott
- Sam Simmons
- Samuel Baker
- Sammy Rogers
(Exact primo nome corrisponde primo , ordinati per cognome, seguiti dal resto delle partite ordinati per cognome).
Ho pensato di trasformare questo in 2 querysets e quindi semplicemente combinando le liste, ma mi chiedevo se fosse possibile farlo in 1 query, idealmente attenendosi alla base dell'API django queryset (piuttosto che scrivere una tantum query). Qualcuno sa un modo per farlo?
Grazie in anticipo.
anche Sei usando 'django.contrib.auth.models.User'? in tal caso, 'first_name' e' last_name' sono i nomi di campo predefiniti. –
No questo è un modello personalizzato diverso. – Chad
solo doppio controllo =) –