Dedovanje vam omogoča ponovno uporabo kode in ustvarjanje čistejših podatkovnih modelov. Toda Django ponuja več kot en način dedovanja, zato se prepričajte, da poznate razlike.

Dedovanje modela je funkcija Django ORM, ki razvijalcem omogoča ustvarjanje hierarhičnih odnosov med modeli baze podatkov. Omogoča ponovno uporabo kode, razširljivost in čistejšo osnovo kode z izkoriščanjem načel objektno usmerjenega programiranja.

Ne glede na to, ali gradite kompleksno spletno aplikacijo ali delate na manjšem projektu, lahko dedovanje modela ponudi znatne prednosti, kot je zmanjšanje redundance in zagotavljanje doslednega vedenja.

Vrste dedovanja modela v Djangu

Django ponuja podporo za tri vrste dedovanja modela:

  1. Abstraktni osnovni razredi.
  2. Dedovanje več tabel.
  3. Proxy modeli.

Vsaka od teh vrst dedovanja modela ima prednosti in uporabili jih boste za posebne namene.

Abstraktni osnovni razredi

Abstraktni osnovni razredi nudijo način za definiranje skupnih polj in metod, ki jih lahko podeduje več modelov. Na primer, če imate dva modela, ki si delita podobna polja, lahko za definiranje podobnih polj uporabite abstrakten osnovni razred. Oglejte si ta primer:

instagram viewer

razredStranka(modeli. model):
ime = modeli. CharField (max_length=50)
e-pošta = modeli. EmailField()
customer_id = modeli. IntegerField()

razredProdajalec(modeli. model):
ime = modeli. CharField (max_length=50)
e-pošta = modeli. EmailField()
seller_id = modeli. IntegerField()

Zgornji delček kode definira dva modela Django: Stranka in Prodajalec. Ti modeli imajo dve skupni področji, in sicer ime in E-naslov. Če želite preprečiti to redundanco, lahko ustvarite ločen model za shranjevanje skupnih polj v Stranka in Prodajalec modeli in jih naredite abstraktne.

razredUserInfo(modeli. model):
ime = modeli. CharField (max_length=50)
e-pošta = modeli. EmailField()

razredMeta:
povzetek = Prav

Zgornji delček kode definira nov model in nastavi povzetek pripisati Prav. To pomeni, da bo model abstrakten in Django ne bo ustvaril tabele v bazi podatkov.

Lahko prepišete Stranka in Prodajalec takšni modeli:

razredStranka(Informacije o uporabniku):
customer_id = modeli. IntegerField()

razredProdajalec(Informacije o uporabniku):
seller_id = modeli. IntegerField()

V zgornjem delčku kode je Stranka in Prodajalci modeli podedujejo od UserInfo model namesto modeli. Model.

Svoje modele si lahko ogledate na skrbniški plošči, tako da jih registrirate v svojem admin.py datoteka, kot je ta:

od .modeli uvoz Stranka, prodajalec

admin.site.register (stranka)
admin.site.register (Prodajalec)

Preselite svoje načine in zaženite svoj razvojni strežnik tako, da na a ukazna vrstica:

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

Pojdite na svoje skrbniško mesto in se prijavite s podatki o superuporabniku. Morali bi videti vsa tri polja za vsak model.

V tem primeru je Django ustvaril tabelo za Stranka in Prodajalec modeli. Vidite lahko, da UserInfo model nima tabele, ker je abstrakten.

Večtabelno dedovanje

Dedovanje z več tabelami lahko uporabite, kadar mora nadrejeni model poleg podrejenega modela obstajati tudi kot tabela v bazi podatkov.

Za razliko od abstraktnega dedovanja osnovnega razreda, kjer nadrejeni model ne bo tabela v bazi podatkov, dedovanje z več tabelami ustvari tabelo za nadrejeni model.

Pri dedovanju z več tabelami podrejeni model podeduje vsa polja in metode svojega nadrejenega modela in doda svoja posebna polja. Tuji ključi pomoč pri vzpostavitvi model odnos med starševskimi in podrejenimi modeli.

Tukaj je primer dedovanja več tabel:

razredOseba(modeli. model):
first_name = modeli. CharField (max_length=100)
priimek = modeli. CharField (max_length=100)

defget_name(sebe):
vrnitevf"{self.first_name}{self.last_name}"

razredMeta:
povzetek = Prav

razredZaposleni(Oseba):
Emploee_id = modeli. CharField (max_length=20)
oddelek = modeli. CharField (max_length=100)
plača = modeli. FloatField()
dob = modeli. DateField()

razredVodja(zaposleni):
naslov = modeli. CharField (max_length=100)

Ta delček kode definira tri modele. Prvi model, imenovan Oseba, je abstraktno. Določa samo ime in priimek osebe.

Drugi model, imenovan Zaposleni, podeduje polja Oseba vendar določa dodatna polja. The Zaposleni model ni abstrakten, zato bo imel svojo tabelo v bazi podatkov.

Končni model, imenovan Vodja, podeduje polja Zaposleni model in doda polje, imenovano naslov.

Razmerje med Zaposleni in Vodja modeli se imenujejo Večtabelno dedovanje. Preselite svoje modele, registrirajte jih admin.py, zaženite strežnik in se pomaknite do skrbniške plošče. Morali bi videti dve tabeli, ki jih je ustvaril Django.

Ko boste poskušali dodati novega upravitelja, boste opazili, da ima vsa polja iz Zaposleni model kot tudi lastno polje po meri.

Proxy modeli

Model proxy vam pomaga ustvariti nov model, ki se razširja iz obstoječega modela, ne da bi ustvarili novo tabelo baze podatkov. Pri tej vrsti dedovanja modela si bosta proxy in izvirni model delila isto tabelo. Z uporabo proxy modelov lahko naredite stvari, kot je ustvarjanje modelov po meri in spreminjanje privzetih upraviteljev.

Model proxy lahko ustvarite tako, da dodate proxy=True v Meta razred. Tukaj je primer:

razredProxyModel(Osnovni model):

razredMeta:
posrednik = Prav

Običajna uporaba proxy modela je primerna, ko osnovni model obstaja in je treba ustvariti njegovo specializirano različico z dodano funkcionalnostjo. Tukaj je osnovni primer:

razredObjavi(modeli. model):
naslov = modeli. CharField (max_length=30)
avtor = modeli. CharField (max_length=30)

def__str__(sebe):
vrnitev samonaslov

razredProxyPost(Objava):

razredMeta:
posrednik = Prav

Ta delček kode definira dva modela: Objavi in Moja objava. The Objavi model določa dve polji za naslov in avtorja. The ProxyPost model podeduje od Objavi model.

Preselite zgornje modele in dodajte novo objavo v tabelo, ustvarjeno za Objavi model.

Ko dodate objavo, odprite Proxy objave tabela. Morali bi najti objavo, ki ste jo dodali v Objavi mizo v njej.

Spremembe, ki jih naredite v objavah v Proxy objave tabela bo vplivala na ustrezno objavo v Objavi mizo, in obratno. To dokazuje, da si resnično delijo isto mizo.

Lahko spremenite str() metoda proxy modela:

razredProxyPost(Objava):

razredMeta:
posrednik = Prav
naročanje = ["naslov"]

def__str__(sebe):
vrnitev sam.avtor

S to spremembo je a ProxyPost's predstavitev niza bo njegov avtor, ne naslov. Namesto privzetega polja ID bo vrstni red proxy modela tudi po naslovu.

Ko uporabljate modele proxy, morate upoštevati, da modelu proxy ne morete dodati polj po meri. Primarni primer uporabe modelov proxy je, ko želite, da en model podpira več vedenj.

Modeli proxy vam pomagajo spremeniti vedenje obstoječega modela, ne da bi spremenili njegova polja ali osnovno strukturo tabele baze podatkov.

Uporabite dedovanje modela za ponovno uporabnost kode in organizacijsko strukturo

Z uporabo različnih tehnik dedovanja modela lahko preprosto ustvarite ponovno uporabno in organizirano kodo za svoj projekt.

Dedovanje modela se izogne ​​odvečni kodi in izboljša vzdržljivost in razširljivost vaše kode. Prav tako olajša krmarjenje po vaši kodi in tako spodbuja učinkovito sodelovanje med razvojnimi ekipami.

Poleg dedovanja modelov Django ponuja dedovanje predlog, kar je odličen način za upravljanje in organiziranje predlog za vaše projekte.