Ich habe eine Klassenhierarchie in meinem models.py
. Ich möchte, dass alle von mir definierten Tabellen dasselbe haben unique_together
Zwang. Also möchte ich das in die Meta
Klasse der Basisklasse, von der sie alle erben. Natürlich muss diese Basisklasse auch angegeben werden abstract = True
in seinem Meta
Klasse, und ich möchte nicht, dass die erbenden Klassen abstrakt sind.
Muss ich dasselbe angeben? unique_together
mehrfach einschränken, einmal für jede nicht abstrakte Klasse, die von der abstrakten Basis erbt?
Antworten:
3 für die Antwort № 1beyogen auf Dokumentation
Wenn eine abstrakte Basisklasse erstellt wird, Djangomacht jede in der Basisklasse deklarierte innere Meta-Klasse als Attribut verfügbar. Wenn eine untergeordnete Klasse keine eigene Meta-Klasse deklariert, erbt sie die Meta der übergeordneten Klasse. Wenn das Kind die Meta-Klasse des Elternteils erweitern möchte, kann es die Unterklasse
und auch:
Django nimmt eine Anpassung an die Meta-Klasse voreiner abstrakten Basisklasse: Vor der Installation des Meta-Attributs wird abstract = False festgelegt. Dies bedeutet, dass Kinder abstrakter Basisklassen nicht automatisch selbst zu abstrakten Klassen werden. Natürlich können Sie eine abstrakte Basisklasse erstellen, die von einer anderen abstrakten Basisklasse erbt. Sie müssen lediglich daran denken, jedes Mal explizit abstract = True zu setzen.