2010-11-22 4 views
1

les docs Django disent:comment étendre les classes Meta Django si les classes sont dans des fichiers différents?

class CommonInfo(models.Model): 
    ... 
    class Meta: 
     abstract = True 
     ordering = ['name'] 

class Student(CommonInfo): 
    ... 
    class Meta(CommonInfo.Meta): 
     db_table = 'student_info' 

Mais comment puis-je gérer cela si CommonInfo et étudiants sont dans des fichiers différents? À l'heure actuelle, mon dossier étudiant ressemble

from CommonInfo import CommonInfo 
class Student(CommonInfo): 
    ... 
    class Meta(CommonInfo.Meta): 
     db_table = 'student_info' 

Mais c'est de lancer:

Répondre

2

« AttributeError objet type « CommonInfo » n'a pas d'attribut « Meta » » Le métaclasse utilisé dans Model les bandes de la Meta classe interne de la définition de la classe, de sorte qu'il n'est pas disponible de cette manière pour une utilisation ultérieure. Définissez-le comme une classe distincte et affectez-le à l'attribut de classe Meta si vous en avez besoin ailleurs.

+0

Je pensais que Django ne supprimait que la classe interne Meta des classes de modèles non abstraits. – Erik

+2

@Erik: Il le remplace par un attribut '_meta', mais il n'utilise que les valeurs de la classe interne' Meta' et ne lui est pas directement lié. –

+2

James Bennet a un bon résumé de ce comportement: http://www.b-list.org/weblog/2007/nov/04/working-models/ – Erik

Questions connexes