Django-Find เป็นแอพ Django ที่ทำให้ง่ายต่อการเพิ่มฟังก์ชั่นการค้นหา/ตัวกรองที่ซับซ้อนสำหรับรุ่นในโครงการของคุณ รองรับสองวิธีที่แตกต่างกันในการค้นหาโมเดล Django ของคุณ: แบบสอบถามที่อิงกับหรือใช้ JSON
Django-Find ไม่ใช่เครื่องมือค้นหาข้อความแบบเต็ม แต่ค้นหาฟิลด์ของรุ่นของคุณ กล่าวอีกนัยหนึ่งมันกรองในโมเดลของคุณและให้ข้อมูลแบบตารางเป็นผล
โดยใช้แบบสอบถามเราหมายความว่าคุณสามารถใช้คำสั่งเช่นนี้เพื่อค้นหาโมเดลของคุณ:
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 เป็นชุดค้นหาที่ส่งผ่านไปยังเทมเพลต)
เพียงเพิ่ม mixin ที่ค้นหาได้:
from django_find import Searchable
class Author ( models . Model , Searchable ):
name = models . CharField ( "Author Name" , max_length = 10 )
...และคุณพร้อมที่จะไป:
# 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"' )เพื่อให้ง่ายต่อการค้นหาที่ซับซ้อนซึ่งครอบคลุมหลายรุ่นมีวิธีการสืบค้นที่ใช้ JSON ช่วยให้คุณทำการค้นหาที่กำหนดเองเช่นนี้:
สำหรับสิ่งนี้มีฟังก์ชั่นการค้นหาที่ใช้ JSON:
{
"Author":{"name":[[["equals","test"]]]},
"Book": {"title":[[["notcontains","c"]]]},
"Chapter": {"content":[[["startswith","The "]]]}
}
Django-Find นั้นฉลาดในการหาวิธีเข้าร่วมโมเดลเหล่านั้นเข้าด้วยกันและส่งคืนผลลัพธ์ที่เป็นประโยชน์ ในรหัสของคุณคุณสามารถโหลด JSON และรับผลการค้นหากลับ:
# 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 ))เอกสารฉบับเต็มรวมถึงคำแนะนำการติดตั้งอยู่ที่นี่:
http://django-find.readthedocs.io