Moștenirea vă permite să reutilizați codul și să creați modele de date mai curate. Dar Django oferă mai mult de o modalitate de a moșteni, așa că asigurați-vă că cunoașteți diferențele.

Moștenirea modelului este o caracteristică Django ORM care permite dezvoltatorilor să creeze relații ierarhice între modelele de baze de date. Permite reutilizarea codului, extensibilitatea și o bază de cod mai curată prin valorificarea principiilor programării orientate pe obiecte.

Indiferent dacă construiți o aplicație web complexă sau lucrați la un proiect mai mic, moștenirea modelului poate oferi beneficii semnificative, cum ar fi reducerea redundanței și asigurarea unui comportament consistent.

Tipuri de moștenire model în Django

Django oferă suport pentru trei tipuri de moștenire de model:

  1. Clase de bază abstracte.
  2. Moștenirea cu mai multe mese.
  3. Modele proxy.

Fiecare dintre aceste tipuri de moștenire de model are beneficii și le veți folosi în scopuri specifice.

Clase de bază abstracte

Clasele de bază abstracte oferă o modalitate de a defini câmpuri și metode comune pe care modelele multiple le pot moșteni. De exemplu, dacă aveți două modele care partajează câmpuri similare, puteți utiliza o clasă de bază abstractă pentru a defini câmpurile similare. Aruncă o privire la acest exemplu:

instagram viewer

clasăClient(modele. Model):
nume = modele. CharField (lungime_max =50)
email = modele. EmailField()
customer_id = modele. IntegerField()

clasăVânzător(modele. Model):
nume = modele. CharField (lungime_max =50)
email = modele. EmailField()
seller_id = modele. IntegerField()

Fragmentul de cod de mai sus definește două modele Django: Client și Vânzător. Aceste modele au două domenii comune, și anume Nume și e-mail. Pentru a preveni această redundanță, puteți crea un model separat pentru a păstra câmpurile comune în Client și Vânzător modele și să o facă abstractă.

clasăInformații utilizator(modele. Model):
nume = modele. CharField (lungime_max =50)
email = modele. EmailField()

clasăMeta:
abstract = Adevărat

Fragmentul de cod de mai sus definește un nou model și setează abstract atribuit lui Adevărat. Aceasta înseamnă că modelul va fi abstract, iar Django nu va crea un tabel în baza de date.

Puteți rescrie Client și Vânzător modele de genul acesta:

clasăClient(Informații utilizator):
customer_id = modele. IntegerField()

clasăVânzător(Informații utilizator):
seller_id = modele. IntegerField()

În fragmentul de cod de mai sus, Client și Vânzători modelele moștenesc de la Informații utilizator model în loc de modele. Model.

Puteți vizualiza modelele dvs. în panoul de administrare înregistrându-le în dvs admin.py fisier ca acesta:

din .modele import Client, Vânzător

admin.site.register (Client)
admin.site.register (Vânzător)

Migrați-vă modurile și porniți serverul de dezvoltare rulând următoarele pe a Linie de comanda:

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

Navigați la site-ul dvs. de administrator și conectați-vă cu detaliile superutilizatorului. Ar trebui să vedeți toate cele trei câmpuri pentru fiecare model.

În acest exemplu, Django a creat un tabel pentru Client și Vânzător modele. Puteți vedea că Informații utilizator modelul nu are tabel deoarece este abstract.

Moștenirea cu mai multe mese

Puteți utiliza moștenirea multi-tabel atunci când modelul părinte trebuie să existe și ca tabel în baza de date alături de modelul copil.

Spre deosebire de moștenirea abstractă a clasei de bază, unde modelul părinte nu va fi un tabel în baza de date, moștenirea cu mai multe tabele creează un tabel pentru modelul părinte.

În moștenirea cu mai multe tabele, modelul copil moștenește toate câmpurile și metodele din modelul părinte și adaugă câmpurile sale specifice. Chei străine ajuta la stabilirea relație model între modelele de părinte și de copil.

Iată un exemplu de moștenire multi-table:

clasăPersoană(modele. Model):
prenume = modele. CharField (lungime_max =100)
prenume = modele. CharField (lungime_max =100)

defget_name(de sine):
întoarceref"{self.first_name}{self.last_name}"

clasăMeta:
abstract = Adevărat

clasăAngajat(Persoană):
employee_id = modele. CharField (lungime_max =20)
departament = modele. CharField (lungime_max =100)
salariu = modele. FloatField()
dob = modele. DateField()

clasăAdministrator(Angajat):
titlu = modele. CharField (lungime_max =100)

Acest fragment de cod definește trei modele. Primul model, numit Persoană, este abstract. Acesta definește doar numele și prenumele unei persoane.

Al doilea model, numit Angajat, moștenește câmpurile de Persoană dar definește câmpuri suplimentare. The Angajat modelul nu este abstract, deci va avea tabelul său în baza de date.

Modelul final, numit Administrator, moștenește câmpurile din Angajat model și adaugă un câmp numit titlu.

Relația dintre Angajat și Administrator modelele se numește Moștenirea cu mai multe mese. Migrați-vă modelele, înregistrați-le în admin.py, porniți serverul și navigați la panoul de administrare. Ar trebui să vedeți două tabele create de Django.

Când încercați să adăugați un nou manager, veți observa că are toate câmpurile din Angajat model, precum și propriul câmp personalizat.

Modele proxy

Un model proxy vă ajută să creați un nou model care se extinde dintr-un model existent fără a crea un nou tabel de bază de date. În acest tip de moștenire de model, modelele proxy și originale vor împărtăși același tabel. Folosind modele proxy, puteți face lucruri precum crearea de modele personalizate și schimbarea managerilor impliciti.

Puteți crea un model proxy prin adăugare proxy=Adevărat în Meta clasă. Iată un exemplu:

clasăProxyModel(Model de bază):

clasăMeta:
proxy = Adevărat

Utilizarea tipică a unui model proxy este adecvată atunci când există un model de bază și este necesar să se creeze o versiune specializată a acestuia cu funcționalitate adăugată. Iată un exemplu de bază:

clasăPost(modele. Model):
titlu = modele. CharField (lungime_max =30)
autor = modele. CharField (lungime_max =30)

def__str__(de sine):
întoarcere auto.titlu

clasăProxyPost(Post):

clasăMeta:
proxy = Adevărat

Acest fragment de cod definește două modele: Post și Postul meu. The Post modelul definește două câmpuri pentru titlu și autor. The ProxyPost modelul moștenește de la Post model.

Migrați modelele de mai sus și adăugați o nouă postare în tabelul creat pentru Post model.

După ce ați adăugat postarea, deschideți Postări proxy masa. Ar trebui să găsiți postarea pe care ați adăugat-o la Post masă în ea.

Modificările pe care le faci postărilor din Postări proxy tabelul va afecta postarea corespunzătoare din Post masă și invers. Acest lucru demonstrează că împărtășesc cu adevărat aceeași masă.

Puteți modifica str() metoda modelului proxy:

clasăProxyPost(Post):

clasăMeta:
proxy = Adevărat
comanda = ["titlu"]

def__str__(de sine):
întoarcere auto.autor

Prin această modificare, a ProxyPost reprezentarea șirului va fi autorul acesteia, nu titlul. Ordonarea modelului proxy va fi, de asemenea, după titlu în loc de câmpul ID implicit.

Când utilizați modele de proxy, ar trebui să rețineți că nu puteți adăuga câmpuri personalizate la modelul dvs. de proxy. Cazul de utilizare principal al modelelor proxy este atunci când doriți ca un model să suporte mai multe comportamente.

Modelele proxy vă ajută să modificați comportamentul unui model existent fără a modifica câmpurile acestuia sau structura de bază a tabelului bazei de date.

Utilizați moștenirea modelului pentru reutilizarea codului și structura organizațională

Prin utilizarea diferitelor tehnici de moștenire a modelului, puteți crea cu ușurință cod reutilizabil și organizat pentru proiectul dvs.

Moștenirea modelului evită codul redundant și îmbunătățește menținerea și scalabilitatea codului dvs. De asemenea, ușurează navigarea în cod, încurajând astfel colaborarea eficientă între echipele de dezvoltare.

În afară de moștenirea modelului, Django oferă moștenire de șabloane, care este o modalitate excelentă de a gestiona și organiza șabloanele pentru proiectele dvs.