Perinnön avulla voit käyttää koodia uudelleen ja luoda puhtaampia tietomalleja. Mutta Django tarjoaa enemmän kuin yhden tavan periä, joten varmista, että tiedät erot.

Mallin periytyminen on Django ORM -ominaisuus, jonka avulla kehittäjät voivat luoda hierarkkisia suhteita tietokantamallien välille. Se mahdollistaa koodin uudelleenkäytön, laajennettavuuden ja puhtaamman koodipohjan hyödyntämällä olioohjelmoinnin periaatteita.

Rakennatpa sitten monimutkaista verkkosovellusta tai työskentelet pienemmän projektin parissa, mallin periytyminen voi tarjota merkittäviä etuja, kuten vähentää redundanssia ja varmistaa johdonmukaisen toiminnan.

Mallin periytymisen tyypit Djangossa

Django tarjoaa tukea kolmelle mallin periytymistyypille:

  1. Abstraktit perusluokat.
  2. Monen pöydän perintö.
  3. Välityspalvelinmallit.

Jokaisella näistä malliperinnötyypeistä on etuja, ja käytät niitä tiettyihin tarkoituksiin.

Abstraktit perusluokat

Abstraktit perusluokat tarjoavat tavan määrittää yhteisiä kenttiä ja menetelmiä, jotka useat mallit voivat periä. Jos sinulla on esimerkiksi kaksi mallia, joissa on samankaltaiset kentät, voit määrittää samankaltaiset kentät abstraktin perusluokan avulla. Katso tämä esimerkki:

instagram viewer

luokkaaAsiakas(mallit. Malli):
nimi = mallit. CharField (max_length=50)
sähköposti = mallit. Sähköpostikenttä()
asiakastunnus = mallit. Kokonaislukukenttä()

luokkaaMyyjä(mallit. Malli):
nimi = mallit. CharField (max_length=50)
sähköposti = mallit. Sähköpostikenttä()
myyjätunnus = mallit. Kokonaislukukenttä()

Yllä oleva koodinpätkä määrittelee kaksi Django-mallia: Asiakas ja Myyjä. Näillä malleilla on kaksi yhteistä kenttää, nimittäin nimi ja sähköposti. Tämän redundanssin estämiseksi voit luoda erillisen mallin, joka sisältää yleiset kentät Asiakas ja Myyjä malleja ja tehdä siitä abstraktia.

luokkaaKäyttäjätiedot(mallit. Malli):
nimi = mallit. CharField (max_length=50)
sähköposti = mallit. Sähköpostikenttä()

luokkaaMeta:
abstrakti = Totta

Yllä oleva koodinpätkä määrittää uuden mallin ja määrittää abstrakti omistaa Totta. Tämä tarkoittaa, että malli on abstrakti, eikä Django luo taulukkoa tietokantaan.

Voit kirjoittaa uudelleen Asiakas ja Myyjä tällaisia ​​malleja:

luokkaaAsiakas(Käyttäjätiedot):
asiakastunnus = mallit. Kokonaislukukenttä()

luokkaaMyyjä(Käyttäjätiedot):
myyjätunnus = mallit. Kokonaislukukenttä()

Yllä olevassa koodinpätkässä Asiakas ja Myyjät mallit perivät Käyttäjätiedot mallin sijaan mallit. Malli.

Voit tarkastella mallejasi hallintapaneelissa rekisteröimällä ne omalle tilillesi admin.py tiedosto näin:

alkaen .malleja tuonti Asiakas, myyjä

admin.site.register (Asiakas)
admin.site.register (Myyjä)

Siirrä tilat ja käynnistä kehityspalvelin suorittamalla seuraava a komentorivi:

python manage.py makemigrations \
&& python manager.py siirrä \
&& python manage.py runserver

Siirry järjestelmänvalvojan sivustollesi ja kirjaudu sisään pääkäyttäjätiedoillasi. Sinun pitäisi nähdä jokaisen mallin kaikki kolme kenttää.

Tässä esimerkissä Django on luonut taulukon Asiakas ja Myyjä mallit. Voit nähdä, että Käyttäjätiedot mallissa ei ole taulukkoa, koska se on abstrakti.

Monen taulukon periytyminen

Voit käyttää usean taulukon periytymistä, kun emomallin on myös oltava taulukkona tietokannassa alimallin rinnalla.

Toisin kuin abstrakti perusluokan periytyminen, jossa emomalli ei ole tietokannan taulukko, usean taulukon periytyminen luo taulukon emomallille.

Usean taulukon periytymisessä lapsimalli perii kaikki kentät ja menetelmät emomallistaan ​​ja lisää sen tietyt kentät. Vieraat avaimet auttaa perustamaan mallisuhde vanhempien ja lasten mallien välillä.

Tässä on esimerkki usean taulukon periytymisestä:

luokkaaHenkilö(mallit. Malli):
etunimi = mallit. CharField (max_length=100)
sukunimi = mallit. CharField (max_length=100)

defhanki_nimi(itse):
palataf"{self.first_name}{itse.sukunimi}"

luokkaaMeta:
abstrakti = Totta

luokkaaTyöntekijä(Henkilö):
työntekijä_id = mallit. CharField (max_length=20)
osasto = mallit. CharField (max_length=100)
palkka = mallit. FloatField()
dob = mallit. Päivämääräkenttä()

luokkaaManager(Työntekijä):
otsikko = mallit. CharField (max_length=100)

Tämä koodinpätkä määrittelee kolme mallia. Ensimmäinen malli ns Henkilö, on abstrakti. Se määrittelee vain henkilön etu- ja sukunimen.

Toinen malli, ns Työntekijä, perii kentät Henkilö mutta määrittää lisäkenttiä. The Työntekijä malli ei ole abstrakti, joten sen taulukko on tietokannassa.

Lopullinen malli ns Manager, perii kentät Työntekijä malli ja lisää kentän nimeltä otsikko.

Suhde Työntekijä ja Manager malleja kutsutaan Monen taulukon periytyminen. Siirrä mallisi, rekisteröi ne admin.py, käynnistä palvelimesi ja siirry hallintapaneeliin. Sinun pitäisi nähdä kaksi Djangon luomaa taulukkoa.

Kun yrität lisätä uuden ylläpitäjän, huomaat, että siinä on kaikki kentät Työntekijä malli sekä oma mukautettu kenttä.

Välityspalvelinmallit

Välityspalvelinmallin avulla voit luoda uuden mallin, joka jatkuu olemassa olevasta mallista luomatta uutta tietokantataulukkoa. Tällaisessa malliperinnössä välityspalvelin ja alkuperäiset mallit jakavat saman taulukon. Välityspalvelinmalleja käyttämällä voit esimerkiksi luoda mukautettuja malleja ja muuttaa oletushallintaohjelmia.

Voit luoda välityspalvelinmallin lisäämällä proxy=Tosi in Meta luokkaa. Tässä on esimerkki:

luokkaaVälityspalvelinmalli(Perusmalli):

luokkaaMeta:
välityspalvelin = Totta

Tyypillinen välityspalvelinmallin käyttö on tarkoituksenmukaista, kun perusmalli on olemassa ja siitä on luotava erikoisversio, jossa on lisätoimintoja. Tässä on perusesimerkki:

luokkaaLähettää(mallit. Malli):
otsikko = mallit. CharField (max_length=30)
tekijä = mallit. CharField (max_length=30)

def__str__(itse):
palata itse.title

luokkaaProxyPost(Lähettää):

luokkaaMeta:
välityspalvelin = Totta

Tämä koodinpätkä määrittelee kaksi mallia: Lähettää ja MyPost. The Lähettää malli määrittelee kaksi kenttää nimelle ja tekijälle. The ProxyPost malli perii Lähettää malli.

Siirrä yllä olevat mallit ja lisää uusi viesti tälle luotuun taulukkoon Lähettää malli.

Kun olet lisännyt viestin, avaa Välityspalvelimen viestit pöytä. Sinun pitäisi löytää viesti, jonka lisäät Lähettää pöytä siinä.

Viesteihin tekemäsi muutokset Välityspalvelimen viestit taulukko vaikuttaa vastaavaan virkaan Lähettää pöytään ja päinvastoin. Tämä osoittaa, että he todella jakavat saman pöydän.

Voit muokata str() välityspalvelinmallin menetelmä:

luokkaaProxyPost(Lähettää):

luokkaaMeta:
välityspalvelin = Totta
tilaus = ["titteli"]

def__str__(itse):
palata itse.tekijä

Tällä muutoksella a ProxyPost merkkijonoesitys on sen tekijä, ei otsikko. Välityspalvelinmallin järjestys tapahtuu myös otsikon mukaan oletustunnuskentän sijaan.

Kun käytät välityspalvelinmalleja, sinun tulee muistaa, että et voi lisätä mukautettuja kenttiä välityspalvelinmalliisi. Välityspalvelinmallien ensisijainen käyttötapa on, kun haluat yhden mallin tukevan useita toimintoja.

Välityspalvelinmallien avulla voit muuttaa olemassa olevan mallin toimintaa muuttamatta sen kenttiä tai taustalla olevaa tietokantataulukkorakennetta.

Käytä mallin periytymistä koodin uudelleenkäytettävyyteen ja organisaatiorakenteeseen

Hyödyntämällä erilaisia ​​mallin periytymisen tekniikoita, voit helposti luoda uudelleen käytettävää ja järjestettyä koodia projektillesi.

Mallin periytyminen välttää redundantin koodin ja parantaa koodisi ylläpidettävyyttä ja skaalautuvuutta. Sen avulla on myös helppo navigoida koodissa, mikä edistää tehokasta yhteistyötä kehitystiimien välillä.

Mallin perinnön lisäksi Django tarjoaa malliperinnön, joka on loistava tapa hallita ja järjestää malleja projekteillesi.