Django - dinaminiai modeliai

Turinys
In Django klasės yra objektai Python, Kaip ir bet kuris kitas objektas, mes galime pasiekti daug įdomių efektų programos vykdymo metu, nes turime viską Python funkcijos ir metodai „Django“ galime sukurti klases, kurios gali generuoti dinamines klases.
Sukūrę dinaminę klasę, galime suteikti tam tikrų pranašumų, pavyzdžiui, sukurti modelį iš klasės ir taip sukurti naujas funkcijas.
Kaip pamokos veikia sistemoje?
Kad galėtume sukurti dinaminius modelius, pirmiausia turime įsitikinti, kad suprantame, kaip klasės veikia „Python“.
Mes žinome, kad pamokos Python yra objektai, kuriuos galima sukurti vykdymo metu naudojant vidinį konstruktorių tipas () ir gauti išsamią informaciją apie tai, kaip jie turėtų būti apibrėžti.
Django modeliai
Kadangi žinome, kaip klasės veikia „Python“, turime pabrėžti, kad modeliai Django jos yra standartinės „Python“ klasės, tik jos deklaruojamos taip Django galite juos naudoti ir tai, kad jie yra standartinės klasės, leidžia mums sukurti modelius vykdymo metu.
Pirmasis įgyvendinimas
Pažiūrėkime šį paveikslėlį su mažu kodu:

Čia matome, kaip Django sistema Importuojame modelių modulį, tada sukuriame modelių kūrimo metodą naudojant konstruktoriaus tipas () ką minėjome ankstesniame vadovėlio punkte.
Tačiau akivaizdu, kad šis mūsų taikomas supaprastintas metodas neveiks, problema ta, kad „Django“ tikisi, kad į žodyną bus įtrauktas modulis su kodu.
Dabar pažiūrėkime kodą, kuriuo išspręsime šią problemą:
 def create_model (vardas, modulio_ kelias): grąžinimo tipas (vardas, (models.Model,), {'__module__': module_path}) 

Taikydami šį metodą pašalinome pirmąją klaidą, atsiradusią su pirmuoju pavyzdžiu.
Pridėti konfigūracijos parinktis
Mes užbaigsime kodą, skirtą dinaminiams modeliams kurti, įskaitant galimybę, kad galime įtraukti parinktis django konfigūracija, tam mes naudosime Meta klasė ir mes perrašysime jos veikimą, kad mūsų naujasis diegimas leistų mums iš naujo apibrėžti, kaip mes elgsimės su parinktimis, toliau esančiame paveikslėlyje pažiūrėkime kodą, kuris jau baigtas, kad tai pasiektume:

Šiame kode aiškiai pakeitėme kai kuriuos pradinio kodo aspektus, pirmiausia nustatydami, kad modulio kelias yra: Django.db.models, iš čia gausime pradinius apibrėžimus, kai tai įvyks, sukuriame žodyną, kur jį priskiriame __module__ mūsų apibrėžto kelio vertė.
Tada mes iš naujo dirbame „Meta“ klasę ir taip išsaugome galimas problemas, apie kurias diskutavome šio punkto pradžioje, pagaliau galime paskambinti tipo () metodas, perduodamas reikiamus duomenis, o ne klaidas.
Turėdami naujų žinių, kurias sukūrėme, jau turime tvirtą pagrindą, su kuriuo galime bendrauti su kodu Django saugesniu būdu, o tai suteikia mums palankią padėtį kuriant programas ir dinamiškai kuriant modelius per mūsų programos vykdymo laiką.Ar jums patiko ir padėjo ši pamoka?Galite apdovanoti autorių paspausdami šį mygtuką, kad suteiktumėte jam teigiamą tašką
wave wave wave wave wave