2010-07-06 4 views
5

J'utilise django et une définition de modèle tel queEn django, __init__ fonction sur le modèle, les causes d'attributs erreur, ne peut pas enregistrer la base de données

class Question(models.Model): 
    title = models.CharField(max_length=100) 
    description = models.TextField() 
    order = models.IntegerField() 

    def __init__(self, *args, **kwargs): 
     self.title = kwargs.get('title','Default Title') 
     self.description = kwargs.get('description', 'DefDescription') 
     self.order = kwargs.get('order', 0) 

tentative d'appeler save() sur un objet de la classe question, provoque la réponse de l'interpréteur

/django/db/utils.py", line 133, in _route_db 
    return hints['instance']._state.db or DEFAULT_DB_ALIAS 
AttributeError: 'Question' object has no attribute '_state' 

Toutefois, en supprimant la fonction _____init_____, tout est rétabli. Une idée sur ce qui cause cela et comment le résoudre?

merci beaucoup

Répondre

11

Vous devez appeler la superclasse méthode __init__ à un moment donné dans votre sous-classe méthode __init__:

def __init__(self, *args, **kwargs): 
    super(Question, self).__init__(*args, **kwargs) 
    # your code here 
+0

Quelque chose que les gens devraient savoir de ce qui m'a bloqué, c'est que super doit être appelé avant d'assigner des champs au modèle. Il apparaît également qu'il n'est pas nécessaire de sauvegarder le modèle après avoir assigné des champs –

2

Selon le Django models docs, il est recommandé de ne pas remplacer __init__ méthode pour les modèles . L'utilisation de @classmethod ou du gestionnaire personnalisé est préférable.

Questions connexes