Django - dynamiske modeller

Innholdsfortegnelse
I Django klasser er objekter Python, Som alle andre objekter kan vi oppnå mange interessante effekter på tidspunktet for programgjennomføring, takket være det faktum at vi har alt Python -funksjoner og -metoder tilgjengelig i Django kan vi bygge klasser som kan generere dynamiske klasser.
Å lage en dynamisk klasse kan gi oss noen fordeler, for eksempel å lage en modell fra en klasse, og dermed generere nye funksjoner.
Hvordan fungerer klasser i rammen?
For å komme til poenget med å generere dynamiske modeller, må vi først sørge for at vi forstår hvordan klasser fungerer i Python.
Vi vet at klassene i Python er objekter som kan opprettes ved kjøretid ved hjelp av den interne konstruktøren type () og motta detaljer om hvordan de skal defineres.
Modeller i Django
Siden vi vet hvordan klasser fungerer i Python, må vi understreke at modeller i Django de er standard Python -klasser, bare de er deklarert på den måten Django du kan bruke dem og at de er standardklasser, lar oss generere modeller ved kjøretid.
Første implementering
La oss se følgende bilde med en liten kode:

Her ser vi hvordan Django -rammeverk Vi importerer modellmodulen, så lager vi en metode for å lage modellene med konstruktortype () som vi hadde nevnt i forrige punkt i opplæringen.
Imidlertid kommer denne forenklede tilnærmingen som vi har brukt åpenbart ikke til å fungere, problemet er at Django forventer at en ordbok inneholder en modul med koden.
La oss nå se en kode som vi løser dette problemet med:
 def create_model (navn, module_path): returtype (navn, (models.Model,), {'__module__': module_path}) 

Med denne implementeringen har vi eliminert den første feilen som kom ut med det første eksemplet.
Legg til konfigurasjonsalternativer
Vi skal fullføre koden vår for å generere dynamiske modeller, inkludert muligheten for at vi kan inkludere alternativene for django -konfigurasjon, for dette vil vi bruke Meta klasse og vi kommer til å overskrive driften slik at vår nye implementering lar oss omdefinere måten vi skal håndtere alternativene på. La oss se i det følgende bildet koden som allerede er fullført for å oppnå dette:

I denne koden har vi klart endret noen aspekter av vår første kode, vi starter med å definere at banen til modulen er: Django.db.modeller, herfra skal vi få de første definisjonene, når dette skjer, lager vi en ordbok der vi tilordner den __modul__ verdien av banen vi har definert.
Deretter omarbeider vi Meta-klassen, med dette lagrer vi de mulige problemene som vi hadde diskutert i begynnelsen av dette punktet, til slutt kan vi kalle vår type () metode, sender de nødvendige dataene og ikke feil.
Med denne nye kunnskapen vi har generert, har vi allerede en solid base som vi kan samhandle med koden for Django på en mer sikker måte, noe som setter oss i en fordelaktig posisjon for utvikling av applikasjonene våre og generering av modeller dynamisk i utførelsestiden for programmet vårt.Likte og hjalp du denne opplæringen?Du kan belønne forfatteren ved å trykke på denne knappen for å gi ham et positivt poeng

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave