9
votes

Django QuerySet - à la recherche de prénom et nom nominal

J'ai une application Django qui récupère tous les sujets d'une seule table des utilisateurs. J'ai également mis en place un formulaire de recherche d'entrée, Ceci est la requête effectuée:

all_soggs =     Entity.objects.filter(lastname__istartswith=request.GET['query_term']).order_by('lastname')
if(all_soggs.count()==0):
    all_soggs = Entity.objects.filter(firstname__istartswith=request.GET['query_term']).order_by('firstname')


0 commentaires

3 Réponses :


7
votes

Vous avez besoin de q objets et vous Aussi besoin de diviser votre requête en termes distincts (car aucun prénom ne correspond à la chaîne complète "FirstName Nom").

Voici une idée de correspondre à tout nom du premier ou de famille commençant par "FirstName" ou "Nom" dans le Recherchez "Prénom Nom".

Il s'agit d'une recherche générique - ajustez la requête en fonction de vos besoins spécifiques!

EDIT: Oups, je n'aime vraiment pas utiliser Confusion, mais ceux-ci doivent être ornés ensemble et nous ne pouvons pas faire une version plus verbeuse car le nombre de termes est inconnu. xxx

clarifier comment utiliser les objets Q, Compte tenu de la recherche "Prénom Nom", la requête précédente est égale à: xxx


0 commentaires

15
votes

copier / coller de: https://stackoverflow.com/a/17361729/1297812

from django.db.models import Q 

def find_user_by_name(query_name):
   qs = User.objects.all()
   for term in query_name.split():
     qs = qs.filter( Q(first_name__icontains = term) | Q(last_name__icontains = term))
   return qs


0 commentaires

0
votes

Question similaire: Nom complet de Django

query = request.GET.get('query')
entities = []

try:
    firstname = query.split(' ')[0]
    lastname  = query.split(' ')[1]
    entities += Entity.objects.filter(firstname__icontains=firstname,lastname__icontains=lastname)
    entities += Entity.objects.filter(firstname__icontains=lastname,lastname__icontains=firstname)

entities = set(entities)


2 commentaires

Quel est le point de répondre à la question deux fois et de référencer votre propre réponse?


Selon les règles de débordement de pile, vous devez donner une réponse complète, même si vous vous référez à un lien, car les liens peuvent être cassés