Warisan memungkinkan Anda menggunakan kembali kode dan membuat model data yang lebih bersih. Tapi Django menawarkan lebih dari satu cara untuk mewarisi, jadi pastikan anda mengetahui perbedaannya.

Pewarisan model adalah fitur Django ORM yang mengizinkan pengembang untuk membuat hubungan hirarkis antara model basis data. Ini memungkinkan penggunaan kembali kode, ekstensibilitas, dan basis kode yang lebih bersih dengan memanfaatkan prinsip-prinsip pemrograman berorientasi objek.

Apakah Anda sedang membangun aplikasi web yang kompleks atau mengerjakan proyek yang lebih kecil, pewarisan model dapat menawarkan keuntungan yang signifikan, seperti mengurangi redundansi dan memastikan perilaku yang konsisten.

Jenis Pewarisan Model di Django

Django menawarkan dukungan untuk tiga tipe pewarisan model:

  1. Kelas Basis Abstrak.
  2. Warisan multi-tabel.
  3. Model Proksi.

Masing-masing jenis pewarisan model ini memiliki manfaat dan Anda akan menggunakannya untuk tujuan tertentu.

Kelas Basis Abstrak

Kelas dasar abstrak menyediakan cara untuk mendefinisikan bidang dan metode umum yang dapat diwariskan oleh banyak model. Misalnya, jika Anda memiliki dua model yang berbagi bidang serupa, Anda bisa menggunakan kelas dasar abstrak untuk menentukan bidang serupa. Lihatlah contoh ini:

instagram viewer

kelasPelanggan(model. Model):
nama = model. CharField (max_length=50)
email = model. Bidang Email()
customer_id = model. BidangBilanganBilangan()

kelasPenjual(model. Model):
nama = model. CharField (max_length=50)
email = model. Bidang Email()
seller_id = model. BidangBilanganBilangan()

Cuplikan kode di atas mendefinisikan dua model Django: Pelanggan Dan Penjual. Model ini berbagi dua bidang umum, yaitu nama Dan surel. Untuk mencegah redundansi ini, Anda dapat membuat model terpisah untuk menyimpan bidang umum di Pelanggan Dan Penjual model dan membuatnya abstrak.

kelasInfo Pengguna(model. Model):
nama = model. CharField (max_length=50)
email = model. Bidang Email()

kelasMeta:
abstrak = BENAR

Cuplikan kode di atas mendefinisikan model baru dan menyetel abstrak atribut untuk BENAR. Ini berarti modelnya akan abstrak, dan Django tidak akan membuat tabel di database.

Anda dapat menulis ulang Pelanggan Dan Penjual model seperti ini:

kelasPelanggan(Info Pengguna):
customer_id = model. BidangBilanganBilangan()

kelasPenjual(Info Pengguna):
seller_id = model. BidangBilanganBilangan()

Dalam cuplikan kode di atas, file Pelanggan Dan Penjual model mewarisi dari Info Pengguna model bukannya model. Model.

Anda dapat melihat model Anda di panel admin dengan mendaftarkannya di admin.py berkas seperti ini:

dari .model impor Pelanggan, Penjual

admin.site.register (Pelanggan)
admin.site.register (Penjual)

Migrasikan mode Anda dan mulai server pengembangan Anda dengan menjalankan yang berikut ini di a garis komando:

python manage.py makemigrations \
&& python manage.py bermigrasi \
&& python kelola.py runserver

Arahkan ke situs admin Anda dan masuk dengan detail pengguna super Anda. Anda akan melihat ketiga kolom untuk setiap model.

Dalam contoh ini, Django telah membuat tabel untuk Pelanggan Dan Penjual model. Anda dapat melihat bahwa Info Pengguna model tidak memiliki tabel karena abstrak.

Warisan Multi-Tabel

Anda bisa menggunakan pewarisan multi-tabel saat model induk juga harus ada sebagai tabel di database bersama model anak.

Tidak seperti pewarisan kelas dasar abstrak, di mana model induk tidak akan menjadi tabel dalam database, pewarisan multi-tabel membuat tabel untuk model induk.

Dalam pewarisan multi-tabel, model anak mewarisi semua bidang dan metode dari model induknya dan menambahkan bidang spesifiknya. Kunci asing membantu mendirikan hubungan model antara model orang tua dan anak.

Berikut adalah contoh pewarisan multi-tabel:

kelasOrang(model. Model):
first_name = model. CharField (max_length=100)
last_name = model. CharField (max_length=100)

defget_name(diri sendiri):
kembaliF"{self.first_name}{self.last_name}"

kelasMeta:
abstrak = BENAR

kelasKaryawan(Orang):
employee_id = model. CharField (max_length=20)
departemen = model. CharField (max_length=100)
gaji = model. Bidang Apung()
dob = model. BidangTanggal()

kelasPengelola(Karyawan):
judul = model. CharField (max_length=100)

Cuplikan kode ini mendefinisikan tiga model. Model pertama, disebut Orang, bersifat abstrak. Ini hanya mendefinisikan nama depan dan belakang seseorang.

Model kedua, disebut Karyawan, mewarisi bidang dari Orang tetapi mendefinisikan bidang tambahan. Itu Karyawan modelnya tidak abstrak, jadi akan ada tabelnya di database.

Model terakhir, disebut Pengelola, mewarisi bidang dari Karyawan model dan menambahkan bidang yang disebut judul.

Hubungan antara Karyawan Dan Pengelola model disebut Warisan Multi-Tabel. Migrasikan model Anda, daftarkan admin.py, mulai server Anda, dan arahkan ke panel admin. Anda akan melihat dua tabel yang dibuat oleh Django.

Saat Anda mencoba menambahkan pengelola baru, Anda akan melihat bahwa ia memiliki semua bidang dari Karyawan model serta bidang kustomnya sendiri.

Model Proksi

Model proxy membantu Anda membuat model baru yang diperluas dari model yang sudah ada tanpa membuat tabel database baru. Dalam pewarisan model semacam ini, proxy dan model asli akan berbagi tabel yang sama. Menggunakan model proxy, Anda dapat melakukan hal-hal seperti membuat model khusus dan mengubah pengelola default.

Anda dapat membuat model proxy dengan menambahkan proksi=Benar dalam Meta kelas. Berikut contohnya:

kelasProxyModel(Model Dasar):

kelasMeta:
proksi = BENAR

Penggunaan umum model proxy sesuai ketika model dasar ada dan ada kebutuhan untuk membuat versi khusus dengan fungsionalitas tambahan. Inilah contoh dasarnya:

kelasPos(model. Model):
judul = model. CharField (max_length=30)
penulis = model. CharField (max_length=30)

def__str__(diri sendiri):
kembali self.title

kelasProxyPost(Pos):

kelasMeta:
proksi = BENAR

Cuplikan kode ini mendefinisikan dua model: Pos Dan Postingku. Itu Pos model mendefinisikan dua bidang untuk judul dan penulis. Itu ProxyPost model mewarisi dari Pos model.

Migrasikan model di atas dan tambahkan postingan baru ke tabel yang dibuat untuk Pos model.

Setelah menambahkan postingan, buka Posting proxy meja. Anda harus menemukan pos yang Anda tambahkan ke Pos meja di dalamnya.

Perubahan yang Anda buat pada postingan di Posting proxy meja akan mempengaruhi posting yang sesuai di Pos meja, dan sebaliknya. Ini membuktikan bahwa mereka benar-benar berbagi meja yang sama.

Anda dapat memodifikasi str() metode model proxy:

kelasProxyPost(Pos):

kelasMeta:
proksi = BENAR
memesan = ["judul"]

def__str__(diri sendiri):
kembali self.author

Dengan modifikasi ini, a ProxyPost representasi string akan menjadi penulisnya, bukan judulnya. Pengurutan model proxy juga akan berdasarkan judul, bukan kolom ID default.

Saat menggunakan model proxy, Anda harus ingat bahwa Anda tidak dapat menambahkan bidang khusus ke model proxy Anda. Kasus penggunaan utama model proxy adalah saat Anda ingin satu model mendukung banyak perilaku.

Model proxy membantu Anda mengubah perilaku model yang sudah ada tanpa mengubah bidangnya atau struktur tabel database yang mendasarinya.

Gunakan Pewarisan Model untuk Penggunaan Kembali Kode dan Struktur Organisasi

Dengan memanfaatkan berbagai teknik pewarisan model, Anda dapat dengan mudah membuat kode yang dapat digunakan kembali dan terorganisir untuk proyek Anda.

Warisan model menghindari kode yang berlebihan dan meningkatkan pemeliharaan dan skalabilitas kode Anda. Ini juga memudahkan navigasi kode Anda, sehingga mendorong kolaborasi yang efisien di antara tim pengembangan.

Terlepas dari pewarisan model, Django menawarkan pewarisan cetakan, yang merupakan cara terbaik untuk mengelola dan menata cetakan untuk proyek Anda.