Pärand võimaldab teil koodi uuesti kasutada ja luua puhtamaid andmemudeleid. Kuid Django pakub pärimiseks rohkem kui ühte viisi, seega veenduge, et teate erinevusi.

Mudeli pärimine on Django ORM-i funktsioon, mis võimaldab arendajatel luua andmebaasimudelite vahel hierarhilisi suhteid. See võimaldab koodi taaskasutamist, laiendatavust ja puhtamat koodibaasi, võimendades objektorienteeritud programmeerimise põhimõtteid.

Olenemata sellest, kas ehitate keerulist veebirakendust või töötate väiksema projekti kallal, võib mudeli pärimine pakkuda olulisi eeliseid, näiteks vähendada koondamist ja tagada järjepidev käitumine.

Django mudeli pärimise tüübid

Django pakub tuge kolme tüüpi mudeli pärimisele:

  1. Abstraktsed baasklassid.
  2. Mitme tabeli pärand.
  3. Puhverserveri mudelid.

Kõigil nendel mudelipärimise tüüpidel on eelised ja te kasutate neid konkreetsetel eesmärkidel.

Abstraktsed baasklassid

Abstraktsed baasklassid võimaldavad määratleda ühiseid välju ja meetodeid, mida mitu mudelit võivad pärida. Näiteks kui teil on kaks mudelit, mis jagavad sarnaseid välju, saate sarnaste väljade määratlemiseks kasutada abstraktset baasklassi. Vaadake seda näidet:

instagram viewer

klassKlient(mudelid. mudel):
nimi = mudelid. CharField (max_length=50)
email = mudelid. Meiliväli()
kliendi_id = mudelid. IntegerField()

klassMüüja(mudelid. mudel):
nimi = mudelid. CharField (max_length=50)
email = mudelid. Meiliväli()
müüja_id = mudelid. IntegerField()

Ülaltoodud koodilõik määratleb kaks Django mudelit: Klient ja Müüja. Nendel mudelitel on kaks ühist välja, nimelt nimi ja email. Selle liiasuse vältimiseks saate luua eraldi mudeli, mis sisaldab ühisväljasid Klient ja Müüja mudeleid ja muuta see abstraktseks.

klassKasutajainfo(mudelid. mudel):
nimi = mudelid. CharField (max_length=50)
email = mudelid. Meiliväli()

klassMeta:
abstraktne = Tõsi

Ülaltoodud koodilõik määratleb uue mudeli ja määrab abstraktne omistada Tõsi. See tähendab, et mudel on abstraktne ja Django ei loo andmebaasis tabelit.

Saate ümber kirjutada Klient ja Müüja sellised mudelid:

klassKlient(Kasutajainfo):
kliendi_id = mudelid. IntegerField()

klassMüüja(Kasutajainfo):
müüja_id = mudelid. IntegerField()

Ülaltoodud koodilõigul on Klient ja Müüjad mudelid pärivad Kasutajainfo asemel mudel mudelid. Mudel.

Saate vaadata oma mudeleid administraatoripaneelil, registreerides need oma admin.py selline fail:

alates .mudelid importida Klient, müüja

admin.site.register (klient)
admin.site.register (müüja)

Migreerige oma režiimid ja käivitage arendusserver, käivitades a käsurida:

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

Liikuge oma administraatori saidile ja logige sisse oma superkasutaja andmetega. Iga mudeli puhul peaksite nägema kõiki kolme välja.

Selles näites on Django loonud tabeli Klient ja Müüja mudelid. Näete, et Kasutajainfo mudelil pole tabelit, kuna see on abstraktne.

Mitme tabeli pärimine

Saate kasutada mitme tabeli pärimist, kui põhimudel peab olema ka tabelina andmebaasis koos alammudeliga.

Erinevalt abstraktsest baasklassi pärimisest, kus vanemmudel ei ole andmebaasis tabel, loob mitmetabeli pärimine emamudeli jaoks tabeli.

Mitme tabeli pärimise korral pärib alammudel kõik väljad ja meetodid oma emamudelist ning lisab selle konkreetsed väljad. Võõrvõtmed aidata luua mudelsuhe vanema ja lapse mudelite vahel.

Siin on näide mitme tabeli pärimisest:

klassIsik(mudelid. mudel):
eesnimi = mudelid. CharField (max_length=100)
perekonnanimi = mudelid. CharField (max_length=100)

defhanki_nimi(ise):
tagasif"{self.first_name}{self.perenimi}"

klassMeta:
abstraktne = Tõsi

klassTöötaja(isik):
töötaja_id = mudelid. CharField (max_length=20)
osakond = mudelid. CharField (max_length=100)
palk = modellid. FloatField()
dob = mudelid. Kuupäevaväli()

klassJuht(Töötaja):
pealkiri = mudelid. CharField (max_length=100)

See koodilõik määratleb kolm mudelit. Esimene mudel, nn Isik, on abstraktne. See määratleb ainult inimese ees- ja perekonnanime.

Teine mudel, nn Töötaja, pärib väljad Isik kuid määratleb täiendavad väljad. The Töötaja mudel ei ole abstraktne, seega on selle tabel andmebaasis.

Lõplik mudel, nn Juht, pärib väljad Töötaja mudel ja lisab välja nimega pealkiri.

Suhe vahel Töötaja ja Juht mudeleid nimetatakse Mitme tabeli pärimine. Migreerige oma mudelid ja registreerige need sisse admin.py, käivitage oma server ja navigeerige administraatoripaneelile. Peaksite nägema kahte Django loodud tabelit.

Kui proovite lisada uut haldurit, märkate, et sellel on kõik väljad alates Töötaja mudel kui ka oma kohandatud väli.

Puhverserveri mudelid

Puhverserveri mudel aitab teil luua uue mudeli, mis ulatub olemasolevast mudelist välja ilma uut andmebaasitabelit loomata. Sellise mudeli pärimise korral jagavad puhverserver ja originaalmudelid sama tabelit. Puhverserveri mudelite abil saate näiteks luua kohandatud mudeleid ja muuta vaikehaldureid.

Lisades saate luua puhverserveri mudeli proxy=Tõsi aastal Meta klass. Siin on näide:

klassPuhverservermudel(BaseModel):

klassMeta:
puhverserver = Tõsi

Puhverserveri mudeli tüüpiline kasutamine on asjakohane, kui baasmudel on olemas ja sellest on vaja luua spetsiaalne versioon, millel on lisafunktsioonid. Siin on põhinäide:

klassPostita(mudelid. mudel):
pealkiri = mudelid. CharField (max_length=30)
autor = modellid. CharField (max_length=30)

def__str__(ise):
tagasi ise.pealkiri

klassProxyPost(Postitus):

klassMeta:
puhverserver = Tõsi

See koodilõik määratleb kaks mudelit: Postita ja MinuPost. The Postita mudel määratleb kaks välja pealkirja ja autori jaoks. The ProxyPost mudel pärib Postita mudel.

Migreerige ülaltoodud mudelid ja lisage jaoks loodud tabelisse uus postitus Postita mudel.

Pärast postituse lisamist avage Puhverserveri postitused laud. Peaksite leidma postituse, mille lisasite Postita laud selles.

Muudatused, mida teete rakenduses postitustes Puhverserveri postitused tabel mõjutab vastavat postitust Postita tabel ja vastupidi. See tõestab, et nad jagavad tõesti sama lauda.

Saate muuta str() puhverserveri mudeli meetod:

klassProxyPost(Postitus):

klassMeta:
puhverserver = Tõsi
tellimine = ["tiitel"]

def__str__(ise):
tagasi ise.autor

Selle modifikatsiooniga a ProxyPosti oma stringi esitus on selle autor, mitte pealkiri. Puhverserveri mudeli järjestus toimub ka pealkirja järgi, mitte vaike-ID välja.

Puhverserveri mudelite kasutamisel pidage meeles, et te ei saa oma puhverserveri mudelile kohandatud välju lisada. Puhverserveri mudelite esmane kasutusjuhtum on siis, kui soovite, et üks mudel toetaks mitut käitumist.

Puhverserveri mudelid aitavad teil muuta olemasoleva mudeli käitumist ilma selle välju või aluseks olevat andmebaasitabeli struktuuri muutmata.

Kasutage koodi korduvkasutatavuse ja organisatsioonilise struktuuri jaoks mudeli pärimist

Kasutades erinevaid mudelipärimise tehnikaid, saate hõlpsasti luua oma projekti jaoks korduvkasutatavat ja organiseeritud koodi.

Mudeli pärimine väldib üleliigset koodi ning suurendab teie koodi hooldatavust ja skaleeritavust. Samuti muudab see koodis navigeerimise lihtsaks, soodustades seega tõhusat koostööd arendusmeeskondade vahel.

Lisaks mudeli pärimisele pakub Django mallide pärimist, mis on suurepärane viis oma projektide mallide haldamiseks ja korraldamiseks.