Je suis au courant des applications de recherche en texte intégral comme Django Solr et solango, etc.Recherche avancée pour un modèle spécifique Django
Ce que je suis à la recherche de construire est plus proche d'une recherche avancée pour un site immobilier. E.g ils peuvent choisir l'emplacement, le prix, etc. semblable à www.viewr.com recherche avancée.
Ce que je l'ai fait jusqu'à présent est ce, sous les modèles gestionnaire personnalisé:
def advanced_search(self, district, location, type, facilities, features, not_permitted):
q_objects = []
l_objects = []
t_objects = []
fc_objects = []
ft_objects = []
np_objects = []
if district:
if location:
for loc in location:
l_objects.append(Q(location__exact=loc))
else:
l_objects.append(Q(location__district=district))
if type:
for ty in type:
t_objects.append(Q(listing_type__exact=ty))
if facilities:
for fc in facilities:
fc_objects.append(Q(property_facilities__exact=fc))
if features:
for ft in features:
ft_objects.append(Q(property_features__exact=ft))
ft_objects.append(Q(community_features__exact=ft))
if not_permitted:
for np in not_permitted:
np_objects.append(Q(not_permitted__exact=np))
# Start with a bare QuerySet
qs = self.get_query_set()
if location:
qs = qs.filter(reduce(operator.or_, l_objects))
if type:
qs = qs.filter(reduce(operator.or_, t_objects))
if facilities:
qs = qs.filter(reduce(operator.or_, fc_objects))
if features:
qs = qs.filter(reduce(operator.or_, ft_objects))
if not_permitted:
qs = qs.filter(reduce(operator.or_, np_objects))
# Use operator's or_ to string together all of your Q objects.
return qs
En ce moment, je ne suis pas d'obtenir des résultats très prévisibles. Y a-t-il quelque chose que je puisse mal faire? Existe-t-il une meilleure façon de faire les différentes recherches OU jointures?
j'ai compris comment faire plusieurs choix c'est simple comme ajouter un __in sur le terrain par exemple property_features__in – Rasiel
La ligne avec 'q_objs = ...' ressemble beaucoup à de la magie pour moi. Souhaitez-vous réécrire votre exemple en code plus pythonique? –