Django's ORM (Object-Relational Mapping) menyediakan cara yang berkuasa dan fleksibel untuk berinteraksi dengan pangkalan data anda menggunakan objek Python. Salah satu ciri yang paling berguna ialah warisan model, yang membolehkan anda memanjangkan dan menggunakan semula model dengan cara yang bersih dan cekap. Dalam catatan blog ini, kami akan meneroka cara berbeza untuk memanjangkan model Django dan memberikan contoh praktikal untuk membantu anda memahami cara memanfaatkan ciri ini dalam projek anda sendiri.
Django menyokong beberapa jenis warisan model:
Kelas asas abstrak membolehkan anda menentukan medan dan kaedah biasa yang akan dikongsi antara berbilang model. Kelas ini sendiri tidak diwakili dalam pangkalan data; sebaliknya, mereka menyediakan asas untuk model lain untuk diwarisi.
Katakan anda ingin membuat satu set model yang berkongsi maklumat hubungan biasa. Anda boleh menentukan kelas asas abstrak untuk menyimpan maklumat ini.
from django.db import models class ContactInfo(models.Model): phone_number = models.CharField(max_length=15) email = models.EmailField() class Meta: abstract = True class Person(ContactInfo): first_name = models.CharField(max_length=100) last_name = models.CharField(max_length=100) class Company(ContactInfo): company_name = models.CharField(max_length=255) address = models.CharField(max_length=255)
ContactInfo ialah kelas asas abstrak dengan medan phone_number dan e-mel. Kedua-dua Orang dan Syarikat mewarisi medan ini, bersama-sama dengan medan khusus mereka sendiri.
Warisan berbilang jadual membolehkan anda mencipta model induk yang diwakili dalam jadual pangkalan datanya sendiri. Model anak mewarisi medan daripada model induk dan mempunyai medan tambahan mereka sendiri. Setiap model mempunyai jadual sendiri dalam pangkalan data, yang membolehkan anda membuat pertanyaan dan memanipulasi data secara bebas.
Andaikan anda mempunyai model Orang asas dan ingin menambah medan tambahan khusus untuk pekerja.
from django.db import models class Person(models.Model): first_name = models.CharField(max_length=100) last_name = models.CharField(max_length=100) class Employee(Person): employee_id = models.CharField(max_length=100) department = models.CharField(max_length=100)
Dalam kes ini, Pekerja melanjutkan Orang dengan medan tambahan id_pekerja dan jabatan. Kedua-dua model mempunyai jadual pangkalan data mereka sendiri dan jadual Pekerja termasuk kunci asing kepada jadual Orang.
Model proksi membolehkan anda mengubah suai gelagat model sedia ada tanpa mengubah skemanya. Anda boleh menggunakan model proksi untuk menambah kaedah tersuai atau menukar pengurus model lalai, tanpa menjejaskan jadual asas.
Andaikan anda mempunyai model Person dan ingin mencipta model proksi untuk menyediakan kefungsian tambahan, seperti kaedah tersuai.
from django.db import models class Person(models.Model): first_name = models.CharField(max_length=100) last_name = models.CharField(max_length=100) def full_name(self): return f"{self.first_name} {self.last_name}" class PersonProxy(Person): class Meta: proxy = True def greet(self): return f"Hello, my name is {self.full_name()}"
PersonProxy ialah model proksi yang menambahkan kaedah sapaan pada model Person. Skema pangkalan data untuk Orang kekal tidak berubah.
Kelas Asas Abstrak berguna apabila anda mempunyai medan dan kaedah yang anda mahu gunakan semula merentas berbilang model, tanpa membuat jadual pangkalan data yang tidak perlu.
Warisan Berbilang Jadual sangat sesuai apabila anda perlu melanjutkan kefungsian model sedia ada dan mengekalkan hubungan yang jelas antara model ibu bapa dan anak.
Model Proksi paling sesuai digunakan apabila anda ingin menambah gelagat baharu atau kaedah tersuai pada model tanpa mengubah skema pangkalan datanya.
Melanjutkan model Django ialah cara yang berkesan untuk mencipta kod yang boleh digunakan semula dan boleh diselenggara. Sama ada anda berkongsi medan biasa dengan kelas asas abstrak, menambah medan baharu dengan warisan berbilang jadual atau menyesuaikan tingkah laku dengan model proksi, Django menyediakan alatan yang anda perlukan untuk membina aplikasi yang teguh dan berskala.
Sila mencuba strategi pewarisan ini untuk melihat cara ia sesuai dengan projek anda sendiri. Memahami dan menggunakan warisan model boleh meningkatkan aliran kerja pembangunan anda dan membawa kepada kod yang lebih bersih dan teratur.
Atas ialah kandungan terperinci Memperluaskan Model Django: Panduan Komprehensif. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!