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')
3 Réponses :
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". P>
Il s'agit d'une recherche générique - ajustez la requête en fonction de vos besoins spécifiques! P>
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. p> clarifier comment utiliser les objets Q, Compte tenu de la recherche "Prénom Nom", la requête précédente est égale à: p>
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
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)
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