Dalam Django Orm (pemetaan objek-relasi), model adalah komponen penting yang mewakili jadual pangkalan data dan bidang yang berkaitan. Pada asasnya, model mentakrifkan struktur data anda, termasuk bidang dan kekangan mereka, yang kemudian dipetakan ke jadual dalam pangkalan data. Apabila anda membuat model di Django, anda pada dasarnya membuat kelas python yang mewarisi dari django.db.models.Model
. Kelas ini mentakrifkan pelbagai atribut, yang menjadi bidang jadual dalam pangkalan data.
Sebagai contoh, model mudah untuk buku mungkin kelihatan seperti ini:
<code class="python">from django.db import models class Book(models.Model): title = models.CharField(max_length=200) author = models.CharField(max_length=100) publication_date = models.DateField()</code>
Dalam contoh ini, Book
adalah model dengan tiga bidang: title
, author
, dan publication_date
. ORM Django akan membuat jadual yang sepadan dalam pangkalan data dengan bidang ini.
Model di Django Orm memberikan banyak faedah, meningkatkan proses pembangunan dan pemeliharaan aplikasi:
Menentukan hubungan antara model di Django Orm dilakukan menggunakan jenis medan tertentu yang mewakili pelbagai jenis hubungan. Berikut adalah jenis hubungan utama dan bagaimana untuk menentukannya:
Hubungan satu sama lain :
Gunakan OneToOneField
apabila baris dalam satu jadual berkaitan dengan satu baris dalam jadual lain. Ini berguna untuk memperluaskan model atau apabila anda perlu memecah satu jadual besar menjadi dua.
<code class="python">class Driver(models.Model): license_number = models.CharField(max_length=20) class Car(models.Model): driver = models.OneToOneField(Driver, on_delete=models.CASCADE)</code>
Hubungan satu-ke-banyak :
Gunakan ForeignKey
untuk menentukan hubungan di mana satu baris dalam satu jadual boleh dikaitkan dengan pelbagai baris dalam jadual lain. Ini adalah jenis hubungan yang paling biasa dalam pangkalan data.
<code class="python">class Author(models.Model): name = models.CharField(max_length=100) class Book(models.Model): author = models.ForeignKey(Author, on_delete=models.CASCADE) title = models.CharField(max_length=200)</code>
Banyak hubungan :
Gunakan ManyToManyField
apabila baris dalam satu jadual boleh dikaitkan dengan pelbagai baris dalam jadual lain, dan sebaliknya. Ini berguna untuk senario seperti mengkategorikan item.
<code class="python">class Book(models.Model): title = models.CharField(max_length=200) class Author(models.Model): name = models.CharField(max_length=100) books = models.ManyToManyField(Book)</code>
Apabila menentukan hubungan ini, anda menentukan parameter on_delete
untuk menentukan apa yang berlaku apabila objek yang berkaitan dipadamkan.
Mengoptimumkan pertanyaan model di Django Orm adalah penting untuk meningkatkan prestasi aplikasi anda. Berikut adalah beberapa amalan terbaik untuk diikuti:
Pilih berkaitan dan prefetch berkaitan :
Gunakan select_related()
untuk hubungan satu-ke-satu dan banyak-satu untuk mengurangkan bilangan pertanyaan pangkalan data. Gunakan prefetch_related()
untuk banyak-banyak dan membalikkan banyak hubungan.
<code class="python"># Fetching all books with their authors books = Book.objects.select_related('author').all() # Fetching all authors with their books authors = Author.objects.prefetch_related('books').all()</code>
Gunakan kaedah QuerySet dengan cekap :
Leverage kaedah API pertanyaan Django seperti filter()
, exclude()
, order_by()
, dan values()
untuk mengambil hanya data yang diperlukan, mengurangkan jumlah data yang diproses dan dipindahkan.
<code class="python"># Fetching only specific fields authors = Author.objects.values('id', 'name')</code>
select_related()
dan prefetch_related()
untuk mengurangkan ini. Gunakan indeks dengan sewajarnya :
Tambah indeks pangkalan data ke medan yang sering digunakan dalam penapisan atau pesanan operasi untuk mempercepat pelaksanaan pertanyaan.
<code class="python">class Book(models.Model): title = models.CharField(max_length=200, db_index=True)</code>
Hadkan Hasil Pertanyaan :
Gunakan kaedah seperti limit()
dan offset()
atau pengirim QuerySet
Django untuk mengehadkan bilangan objek yang diambil, terutamanya apabila berurusan dengan dataset yang besar.
<code class="python"># Fetching the first 10 books books = Book.objects.all()[:10]</code>
select_related()
di ManyToManyField
atau reverse ForeignKey
:select_related()
tidak berfungsi dengan ManyToManyField
atau Reverse ForeignKey
Hubungan. Gunakan prefetch_related()
sebaliknya.Dengan mengikuti amalan terbaik ini, anda boleh mengoptimumkan prestasi pertanyaan Django Orm anda dengan ketara dan meningkatkan kecekapan keseluruhan permohonan anda.
Atas ialah kandungan terperinci Apakah model di Django Orm?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!