Django - dynamiska modeller

Innehållsförteckning
I Django klasser är objekt Pytonorm, Liksom alla andra objekt kan vi uppnå många intressanta effekter vid tidpunkten för programkörning, tack vare att vi har alla Python funktioner och metoder tillgängliga i Django kan vi bygga klasser som kan generera dynamiska klasser.
Att skapa en dynamisk klass kan ge oss några fördelar, till exempel att skapa en modell från en klass och därmed generera nya funktioner.
Hur fungerar klasser i ramverket?
För att komma till poängen med att generera dynamiska modeller måste vi först se till att vi förstår hur klasser fungerar i Python.
Vi vet att klasserna i Pytonorm är objekt som kan skapas vid körning med den interna konstruktorn typ () och få detaljer om hur de ska definieras.
Modeller i Django
Eftersom vi vet hur klasser fungerar i Python måste vi betona att modeller i Django de är standard Python -klasser, bara de deklareras på det sättet Django du kan använda dem och att de är standardklasser tillåter oss att generera modeller vid körning.
Första genomförandet
Låt oss se följande bild med en liten kod:

Här ser vi hur Django -ram Vi importerar modellmodulen, sedan skapar vi en metod för att skapa modellerna med konstruktortyp () som vi hade nämnt i föregående punkt i handledningen.
Men detta förenklade tillvägagångssätt som vi har tillämpat kommer uppenbarligen inte att fungera, problemet är att Django förväntar sig att en ordbok ska innehålla en modul med dess kod.
Låt oss nu se en kod som vi löser detta problem med:
 def create_model (name, module_path): returtyp (name, (models.Model,), {'__module__': module_path}) 

Med denna implementering har vi eliminerat det första felet som kom ut med det första exemplet.
Lägg till konfigurationsalternativ
Vi kommer att komplettera vår kod för att generera dynamiska modeller, inklusive möjligheten att vi kan inkludera alternativen för django -konfiguration, för detta kommer vi att använda Metaklass och vi kommer att skriva över dess drift så att vår nya implementering låter oss omdefiniera hur vi ska hantera alternativen, låt oss se i följande bild den kod som redan är färdigställd för att uppnå detta:

I denna kod har vi tydligt ändrat vissa aspekter av vår initiala kod, vi börjar med att definiera att modulens sökväg är: Django.db.modeller, härifrån kommer vi att få de första definitionerna, när detta händer skapar vi en ordbok där vi tilldelar den __modul__ värdet på den väg som vi har definierat.
Sedan omarbetar vi Metaklassen, med detta sparar vi de möjliga problemen som vi hade diskuterat i början av denna punkt, äntligen kan vi kalla vår typ () metod, skickar de nödvändiga uppgif.webpterna och inte fel.
Med denna nya kunskap som vi har genererat har vi redan en solid bas som vi kan interagera med koden för Django på ett säkrare sätt, vilket sätter oss i en fördelaktig position för utvecklingen av våra applikationer och generering av modeller dynamiskt under genomförandet av vårt program.Gillade du och hjälpte denna handledning?Du kan belöna författaren genom att trycka på den här knappen för att ge honom en positiv poäng

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave