Skip to content

djangodocs

Django 1.11
  • 6.1 current
  • 6.0
  • 5.2 LTS
  • 5.1 unsupported
  • 5.0 unsupported
  • 4.2 unsupported
  • 4.1 unsupported
  • 4.0 unsupported
  • 3.2 unsupported
  • 3.1 unsupported
  • 3.0 unsupported
  • 2.2 unsupported
  • 2.1 unsupported
  • 2.0 unsupported
  • 1.11 unsupported
  • 1.10 unsupported
  • 1.9 unsupported
Bahasa Indonesia
  • English
  • Français
  • 日本語
  • Bahasa Indonesia
  • Português (Brasil)
  • 한국어
  • Español
  • Ελληνικά
  • Polski
Documentation contents
  • Dokumentasi Django
  • Mulai
  • Menggunakan Django
    • Bagaimana memasang Django
    • Model dan basisdata
      • Model
      • Membuat query
      • Pengumpulan
      • Cari
      • Pengelola
      • Melakukan permintaan SQL mentah
      • Transaksi basisdata
      • Basisdata banyak
      • Tablespaces
      • Optimisasi akses basisdata
      • Contoh-contoh dari hubungan model penggunaan API
    • Penanganan permintaan HTTP
    • Bekerja dengan formulir
    • Cetakan
    • Tampilan berdasarkan-kelas
    • Perpindahan
    • Mengelola berkas
    • Percobaan di Django
    • Otentifikasi pengguna di Django
    • Kerangka kerja penyimpanan Django
    • Pengolahan Tampilan Bersyarat
    • Penandatanganan Kriptrograpi
    • Mengirim surel
    • Internasionalisasi dan lokalisasi
    • Pencatatan
    • Halaman
    • Menyambungkan ke Phyton 3
    • Kemananan di Django
    • Penampilan dan optimalisasi
    • Serializing Django objects
    • Pengaturan Django
    • Sinyal
    • Kerangka sistem pemeriksaan
    • Paket eksternal
  • Panduan "Bagaimana"
  • FAQ Django
  • Acuan API
  • Dokumentasi-meta dan bunga rampai
  • Glosarium
  • Catatan terbitan
  • Dalam Django
Django 1.11 is no longer supported. It receives no security fixes. Use it for reference only. Latest release
Indonesian translation. Contributed by the Django community. 68.7% Help translate
  1. Django 1.11
  2. Menggunakan Django
  3. Model dan basisdata

CariLink to this heading#

Sebuah tugas umum untuk aplikasi jaringan adalah untuk mencari beberapa data dalam basisdata dengan masukan pengguna. Dalam sebuah kasus sederhana, ini dapat menyaring daftar dari obyek berdasarkan sebuah kategori. Kasus penggunaan lebih rumit mungkin membutuhkan pencarian dengan berat, kategori, penyorotan, banyak bahasa, dan seterusnya. Dokumen ini menjelaskan beberapa dari kemungkinan kasus penggunaan dan alat-alat anda dapat gunakan.

Kita akan mengacu model sama digunakan dalam Membuat query.

Kasus PenggunaanLink to this heading#

Standar permintaan kata demi kataLink to this heading#

Bidang-bidang berdasarkan-teks mempunyai pilihan dari tindakan pencocokan sederhana. Sebagai contoh, anda mungkin ingin mengizinkan pencarian seorang penulis seperti itu:

Code
>>> Author.objects.filter(name__contains='Terry')
[<Author: Terry Gilliam>, <Author: Terry Jones>]

Ini adalah pemecahan sangat rapuh ketika itu membutuhkan pengguna mengetahui substring tepat dari nama penulis. Pendekatan terbaik berupa pencocokan kasus-tidak-peka (icontains), tetapi ini hanya sedikti lebih baik.

Fungsi-fungsi perbandingan tingkat lanjut lebih banyak basisdataLink to this heading#

Jika anda sedang menggunakan PostgreSQL, Django menyediakan a selection of database specific tools 1 untuk mengizinkan anda mengungkit lebih rumit pilihan permintaan. Basisdata lain mempunyai pemilihan berbeda dari alat-alat, kemungkinan melalui plugin atau fungsi ditentukan-pengguna. Django tidak menyertakan dukungan apapun untuk mereka pada saat ini. Kami akan menggunakan beberapa contoh dari PostgreSQL untuk menunjukkan hal dari kegunaan basisdata mungkin dimiliki.

Pencarian dalam basisdata lain

Semua alat-alat pencarian disediakan oleh django.contrib.postgres dibangun seluruhnya pada API umum seperti custom lookups 1 dan database functions 2. Bergantung pada basisdata anda, anda harus dapat membangun permintaan untuk mengizinkan API yang mirip. Jika ada hal-hal khususyang tidak dapat dicapai cara ini, harap buka sebuah tiket.

Dalam contoh diatas, kami menentukan bahwa pencarian kasus-tidak-peka akan lebih berguna. Ketika berurusan dengan nama-nama bukan-Inggris, perbaikan lebih lanjut adalah menggunakan unaccented comparison 1:

Code
>>> Author.objects.filter(name__unaccent__icontains='Helen')
[<Author: Helen Mirren>, <Author: Helena Bonham Carter>, <Author: Hélène Joy>]

Ini menunjukkan masalah lain, dimana kami sedang mencocokkan terhadap pengejaan berbeda dari nama. Dalam kasus ini kami mempunyai asimetris sekalipun - sebuah pencarian untuk Helen akan mengambil Helena atau Hélène, tetapi bukan kebalikannya. Pilihan lain akan menggunakan perbandingan trigram_similar, yang membandingkan urutan huruf.

Sebagai contoh:

Code
>>> Author.objects.filter(name__unaccent__lower__trigram_similar='Hélène')
[<Author: Helen Mirren>, <Author: Hélène Joy>]

Sekarang kami mempunyai masalah berbeda - nama panjang dari "Helena Bonham Carter" tidak menampilan seperti itu lebih panjang. Pencarian Trigram mempertimbangkan semua perpaduan dari tiga huruf, dan membandingkan seberapa banyak muncul dalam kedua pencarian dan sumber string. Untuk nama terpanjang, ada perpaduan lebih yang muncul dalam string sumber jadi itu tidak lagi dipertimbangkan pencocokan tertutup.

Pilihan benar dari fungsi perbandingan disini tergantung pada kumpulan data tertentu anda, sebagai contoh bahasa digunakan dan jenis dari teks sedang diari Semua contoh-contoh kami telah lihat adalah pada string pendek dimana pengguna mungkin memasukkan sesuatu mendekatkan (dengan meragamkan pengertian) pada sumber data.

Pencarian berdasarkan-dokumenLink to this heading#

Tindakan basisdata sederhana adalah terlalu sederhana pada pendekatan ketika anda mulai mempertimbangkan blok-blok besar dari teks. Dimana contoh-contoh diatas dapat dipikirkan sebagai tindakan-tindakan pada string dari karakter, pencarian teks penuh mencari kata sebenarnya. Tergantung pada sistem digunakan, itu mungkin menggunakan beberapa dari ide-ide berikut:

  • Mengabaikan "kata berhenti" seperti "a", "the", "and".

  • Menghentikan kata-kata, sehingga "pony" dan "ponies" dianggap sama.

  • Bobot kata-kata berdasarkan pada kriteria berbeda seperti sebagaimana sering mereka muncul dalam teks, atau kepentingan dari bidang-bidang, seperti judul atau katakunci, yang mereka muncul.

Ada banyak cara lain untuk menggunakan perangkat lunak pencarian, beberapa dari paling terkemuka adalah Elastic dan Solr. Ini adalah pemecahan pencarian berdasarkan-dokumen penuh. Untuk menggunakan mereka dengan data dari model-model Django, anda akan butuh lapisan yang menterjemahkan data anda kedalam dokumen tekstual, termasuk acuan-kembali ke id basisdata. Ketika sebuah pencarian menggunakan mesin mengembalikan dokumen tertentu, anda dapat kemudian melihat itu dalam basisdata. Ada beragam pustaka-pustaka pihak-ketiga yang dirancang membantu dengan pengolahan ini.

Dukungan PostgreSQLLink to this heading#

PostgreSQL mempunyai penerapan pencarian teks penuh siap pakai sendiri. Selagi tidak sekuat beberapa mesin pencari lain, itu mempunyai keuntungan dari menjadi didalam basisdata anda dan sehingga dapat dengan mudah dipadukan dengan permintaan penghubung lain seperti kategorisasi.

Modul django.contrib.postgres menyediakan beberapa pembantu untuk membuat perubahan permintaan ini. Sebagai contoh, permintaan sederhana mungkin memilih semua masukan blog yang menyebut "cheese":

Code
>>> Entry.objects.filter(body_text__search='cheese')
[<Entry: Cheese on Toast recipes>, <Entry: Pizza recipes>]

Anda dapat juga menyaring pada perpaduan pada bidang dan pada model terkait:

Code
>>> Entry.objects.annotate(
...     search=SearchVector('blog__tagline', 'body_text'),
... ).filter(search='cheese')
[
    <Entry: Cheese on Toast recipes>,
    <Entry: Pizza Recipes>,
    <Entry: Dairy farming in Argentina>,
]

Lihat dokumen contrib.postgres Full text search untuk rincian lengkap.

This page as Markdown JSON

Edit this page on GitHub Official version

PreviousPengumpulan NextPengelola

On this page

  • Kasus Penggunaan
    • Standar permintaan kata demi kata
    • Fungsi-fungsi perbandingan tingkat lanjut lebih banyak basisdata
    • Pencarian berdasarkan-dokumen
      • Dukungan PostgreSQL

An unofficial rendering of the Django documentation.

Not affiliated with or endorsed by the Django Software Foundation. The documentation is copyright © Django Software Foundation and individual contributors, and is used under the BSD 3-Clause licence. “Django” is a trademark of the Django Software Foundation.

This translation is the work of the Django i18n community, not of this site. Read the official documentation at docs.djangoproject.com.

👋 Jason Cartwright