Django-Find est une application Django qui facilite l'ajout de fonctionnalités de recherche / filtre complexes pour les modèles de votre projet. Il prend en charge deux façons différentes de rechercher vos modèles Django: basés sur la requête ou JSON.
Django-Find n'est pas un moteur de recherche de texte intégral, il recherche les champs de vos modèles. En d'autres termes, il filtre sur vos modèles et fournit des données tabulaires en conséquence.
Par requête, nous voulons dire que vous pouvez utiliser des instructions comme celles-ci pour rechercher vos modèles:
author:"robert frost" and (title:road or chapter:2)
{% load find_tags %}
{% find object_list %}
{% for obj in object_list %}
{{ obj.name }}
{% endfor %}
(object_list est une queryset qui est transmise au modèle)
Ajoutez simplement le mélange consultable:
from django_find import Searchable
class Author ( models . Model , Searchable ):
name = models . CharField ( "Author Name" , max_length = 10 )
...Et vous êtes prêt à partir:
# Query-based search returns a standard Django QuerySet that you
# can .filter() and work with as usual.
query = Book . by_query ( 'author:"robert frost" and title:"the road"' )
# You can also get a Django Q object for the statements.
q_obj = Book . q_from_query ( 'author:"robert frost" and title:"the road"' )Pour faciliter les recherches complexes couvrant plusieurs modèles, une méthode de requête basée sur JSON est fournie. Il vous permet de faire des recherches personnalisées comme celles-ci:
Pour cela, une fonctionnalité de recherche basée sur JSON est fournie:
{
"Author":{"name":[[["equals","test"]]]},
"Book": {"title":[[["notcontains","c"]]]},
"Chapter": {"content":[[["startswith","The "]]]}
}
Django-Find est intelligent pour déterminer comment rejoindre ces modèles et renvoyer un résultat utile. Dans votre code, vous pouvez charger le JSON et récupérer le résultat de la recherche:
# JSON-based search exhausts what Django's ORM can do, so it does
# not return a Django QuerySet, but a row-based PaginatedRawQuerySet:
query , field_list = Book . by_json_raw ( '''{
"Chapter": {"title":[[["contains","foo"]]]}
}''' )
print ( '|' . join ( field_list ))
for row in query :
print ( '|' . join ( row ))La documentation complète, y compris les instructions d'installation, est ici:
http://django-find.readthedocs.io