2010-07-03 5 views
2

J'ai une fonction de recherche par nom, qui devrait renvoyer le nom d'une personne, si la recherche correspond au prénom ou au nom de famille. Le problème est que si je recherche des chaînes comme 'prénom nom de famille', il ne trouve pas le nom qui correspond (devinez c'est à cause de l'espace entre les mots). Que dois-je faire pour que la recherche fonctionne? Aussi, si je veux rechercher avec la même recherche le nom d'utilisateur (qui est dans un autre tableau) comment puis-je le faire? Merci beaucoup!Django rechercher des chaînes contenant des espaces

mon code:

def search(request): 
    query = request.GET.get('q', '') 
    if query: 
     qset1 = (
      Q(first_name__icontains=query) | 
      Q(last_name__icontains=query) 
       ) 
     results = UserProfile.objects.filter(qset1).distinct() 
    else: 
     results = [] 

    return render_to_response("search/searchName.html", { 

    'results': results,  
    'query': query}, 
    context_instance=RequestContext(request)) 

Répondre

8

En ce moment, votre analyse ne divise pas la requête du tout, vous pouvez le faire, boucle à travers les résultats, et construire vous-même un objet Q pour placer dans votre requête. Ce qui va essentiellement faire est de fractionner la requête, et faire une boucle sur chaque mot tout en faisant exactement ce que vous faites déjà. Donc, s'ils recherchent "Frank Podolski", ils vérifient que "Frank" est dans le prénom, le nom de famille et ensuite si "Podolski" est aussi dans le prénom, le nom, plutôt que dans la requête dans son ensemble.

Bien sûr, il y a beaucoup plus que vous pouvez faire pour améliorer la recherche comme le stemming, supprimer les mots d'arrêt, etc mais c'est hors du contexte de cette question.

+0

ça marche, merci! :) – dana

+0

Fonctionne pour moi aussi, beau travail! – Spike

Questions connexes