2017-07-13 1 views
-1

Ich habe ein Django-Projekt, das solche Modelle hat.Automatische Vererbung für Django-Modelle

class Part(models.Model): 
    attr1 = models.CharField(max_length=50) 
    attr2 = models.CharField(max_length=50) 

class Document(models.Model): 
    part = models.ForeignKey(Part) 
    attr1 = models.CharField(max_length=50) 

und so weiter.
Es gibt viele Modelle in einem einzigen Modul und ich brauche für jedes Modell ein separates Modell mit den gleichen Attributen plus einem oder mehreren zusätzlichen Attributen.
Wie würde ich das tun, ohne jede einzelne Klasse von Hand zu schreiben?

Bearbeiten
Ok die Frage war ein wenig unklar.
Ich möchte 2 separate Tabelle in der Datenbank für jedes Modell wie oben und eine mit einer zusätzlichen Spalte haben.

Edit 2
Ich glaube, ich habe es, wenn ich

setzen
import inspect 
import sys 

for name, obj in inspect.getmembers(sys.modules[__name__]): 
    if inspect.isclass(obj) and issubclass(obj, models.Model) and hasattr(obj, 'Meta') and inspect.isclass(obj.Meta) and not (
       hasattr(obj.Meta, 'abstract') and obj.Meta.abstract): 
     globals()["Edit" + name] = type("Edit" + name, (obj,), {'fu': 'bar'}) 

am unteren Rande meines models.py, bekomme ich ein neues Modell für jedes in in dieser Datei definiert Modell.
So würde ich EditPart und EditDocument Klassen jeweils mit einem Attribut fu bekommen.

+0

Ist es in Ordnung, minimale Mühe in die Frage zu stellen und zu erwarten, dass andere die Forschung machen und für mich versuchen und mir die Antwort auf einem Goldtablett geben? –

Antwort

0

Wie wäre es mit einem abstract model, von dem Sie erben können?

class BaseModel(models.Model): 
    attr1 = models.CharField(max_length=50) 

    class Meta: 
     abstract = True 


class Part(BaseModel): 
    attr2 = models.CharField(max_length=50) 


class Document(BaseModel): 
    part = models.ForeignKey(Part) 
+0

Nicht was ich gesucht habe, obwohl ich sehe, dass meine Frage ein wenig unklar war. Ich möchte ein Modell Part und ein Modell somethingPart, wo das somethingPart dasselbe wie Part ist, aber ein zusätzliches Attribut hat. –

+0

Können Sie dafür kein abstraktes Modell verwenden? – stephenmuss