Farih.co.id
Home Programming Apa Warisan Model di Django?

Apa Warisan Model di Django?

model inheritance

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:

 class Customer(models.Model):
    name = models.CharField(max_length=50)
    email = models.EmailField()
    customer_id = models.IntegerField()

class Seller(models.Model):
    name = models.CharField(max_length=50)
    email = models.EmailField()
    seller_id = models.IntegerField()

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.

 class UserInfo(models.Model):
    name = models.CharField(max_length=50)
    email = models.EmailField()

    class Meta:
        abstract = True

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:

 class Customer(UserInfo):
    customer_id = models.IntegerField()

class Seller(UserInfo):
    seller_id = models.IntegerField()

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:

 from .models import Customer, Seller

admin.site.register(Customer)
admin.site.register(Seller)

Migrasikan mode Anda dan mulai server pengembangan Anda dengan menjalankan baris perintah berikut:

 python manage.py makemigrations \
    && python manage.py migrate \
    && python manage.py runserver

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

panel admin django menampilkan bidang dari model abstrak

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 membangun hubungan model antara model induk dan anak.

Berikut adalah contoh pewarisan multi-tabel:

 class Person(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)

    def get_name(self):
        return f"{self.first_name} {self.last_name}"

    class Meta:
        abstract = True

class Employee(Person):
    employee_id = models.CharField(max_length=20)
    department = models.CharField(max_length=100)
    salary = models.FloatField()
    dob = models.DateField()

class Manager(Employee):
    title = models.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 Karyawanmewarisi bidang dari Orang tetapi mendefinisikan bidang tambahan. Itu Karyawan modelnya tidak abstrak, jadi akan ada tabelnya di database.

Model terakhir, disebut Pengelolamewarisi 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.

django admin menampilkan bidang dari dua model warisan

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:

 class ProxyModel(BaseModel):

    class Meta:
        proxy = True

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

 class Post(models.Model):
    title = models.CharField(max_length=30)
    author = models.CharField(max_length=30)

    def __str__(self):
        return self.title

class ProxyPost(Post):

    class Meta:
        proxy = True

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.

menambahkan posting baru di panel admin Django

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

representasi string model proxy di panel admin Django

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:

 class ProxyPost(Post):

    class Meta:
        proxy = True
        ordering = ["title"]

    def __str__(self):
        return 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.

representasi string model proxy baru di panel admin Django.

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.

Comment
Share:

Leave a Reply

Your email address will not be published. Required fields are marked *

Ad