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