Django-Find ist eine Django-App, mit der die komplexe Such-/Filterfunktionen für die Modelle in Ihrem Projekt einfach hinzugefügt werden können. Es unterstützt zwei verschiedene Möglichkeiten, Ihre Django-Modelle zu durchsuchen: Abfragenbasierte oder JSON-basiert.
Django-Find ist keine Volltext-Suchmaschine, sondern die Felder Ihrer Modelle. Mit anderen Worten, es filtert in Ihren Modellen und liefert als Ergebnis tabellarische Daten.
Mit abfragebasiertem Abfragen können Sie Anweisungen wie diese verwenden, um Ihre Modelle zu durchsuchen:
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 ist ein Queryset, der an die Vorlage übergeben wird)
Fügen Sie einfach den durchsuchbaren Mixin hinzu:
from django_find import Searchable
class Author ( models . Model , Searchable ):
name = models . CharField ( "Author Name" , max_length = 10 )
...Und du bist gut zu gehen:
# 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"' )Um es einfach zu machen, komplexe Suchvorgänge zu ermöglichen, die mehrere Modelle überspannen, wird die JSON-basierte Abfragemethode bereitgestellt. Es ermöglicht Ihnen, solche benutzerdefinierten Suchanfragen durchzuführen:
Hierzu wird eine JSON-basierte Suchfunktion zur Verfügung gestellt:
{
"Author":{"name":[[["equals","test"]]]},
"Book": {"title":[[["notcontains","c"]]]},
"Chapter": {"content":[[["startswith","The "]]]}
}
Django-Find ist klug darin, herauszufinden, wie diese Modelle zusammengefügt werden und ein nützliches Ergebnis zurückgeben können. In Ihrem Code können Sie den JSON laden und das Suchergebnis zurückerhalten:
# 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 ))Die vollständige Dokumentation, einschließlich Installationsanweisungen, finden Sie hier:
http://django-find.readthedocs.io