Django - dynamiske modeller

Indholdsfortegnelse
I Django klasser er objekter Python, Ligesom ethvert andet objekt kan vi opnå mange interessante effekter på tidspunktet for programkørsel, takket være det faktum, at vi har alle Python funktioner og metoder tilgængelig i Django kan vi bygge klasser, der kan generere dynamiske klasser.
Oprettelse af en dynamisk klasse kan give os nogle fordele, såsom at oprette en model ud fra en klasse og dermed generere nye funktionaliteter.
Hvordan fungerer klasser i rammen?
For at komme til det punkt at generere dynamiske modeller, skal vi først sikre os, at vi forstår, hvordan klasser fungerer i Python.
Vi ved, at klasserne i Python er objekter, der kan oprettes ved runtime ved hjælp af den interne konstruktør type () og modtage detaljer om, hvordan de skal defineres.
Modeller i Django
Da vi ved, hvordan klasser fungerer i Python, skal vi understrege, at modeller i Django de er standard Python -klasser, kun de er erklæret på den måde Django du kan bruge dem, og at de er standardklasser, giver os mulighed for at generere modeller under runtime.
Første implementering
Lad os se følgende billede med en lille kode:

Her ser vi, hvordan Django ramme Vi importerer modellermodulet, derefter opretter vi en metode til at oprette modellerne med konstruktortype () som vi havde nævnt i det foregående punkt i vejledningen.
Men denne forenklede tilgang, som vi har anvendt, vil naturligvis ikke fungere, problemet er, at Django forventer, at en ordbog indeholder et modul med dens kode.
Lad os nu se en kode, som vi løser dette problem med:
 def create_model (navn, module_path): returtype (navn, (models.Model,), {'__module__': module_path}) 

Med denne implementering har vi fjernet den første fejl, der kom ud med det første eksempel.
Tilføj konfigurationsindstillinger
Vi kommer til at fuldføre vores kode til generering af dynamiske modeller, herunder muligheden for, at vi kan inkludere mulighederne for django -konfiguration, til dette vil vi bruge Meta klasse og vi kommer til at overskrive dets drift, så vores nye implementering giver os mulighed for at omdefinere den måde, vi skal håndtere mulighederne på, lad os se i det følgende billede den kode, der allerede er gennemført for at opnå dette:

I denne kode har vi klart ændret nogle aspekter af vores oprindelige kode, vi starter med at definere, at modulets sti er: Django.db.modeller, herfra får vi de første definitioner, når dette sker, opretter vi en ordbog, hvor vi tildeler den __modul__ værdien af ​​den sti, vi har defineret.
Derefter genarbejder vi Meta-klassen, med dette gemmer vi de mulige problemer, som vi havde diskuteret i begyndelsen af ​​dette punkt, endelig kan vi kalde vores type () metode, videregivelse af de nødvendige data og ikke fejl.
Med denne nye viden, som vi har genereret, har vi allerede et solidt grundlag, som vi kan interagere med koden for Django på en mere sikker måde, hvilket sætter os i en fordelagtig position for udviklingen af ​​vores applikationer og generation af modeller dynamisk i udførelsestiden af ​​vores program.Kan du lide og hjælpe denne vejledning?Du kan belønne forfatteren ved at trykke på denne knap for at give ham et positivt punkt

Du vil bidrage til udviklingen af ​​hjemmesiden, at dele siden med dine venner

wave wave wave wave wave