2010-06-18 3 views
2

Je voudrais utiliser les valeurs mises à jour par l'utilisateur d'un ManyToManyField dans la méthode save() redéfinie d'un modèle lorsque j'enregistre une instance dans admin.Accès aux champs M2M mis à jour dans overriden save() dans l'admin de django

Il se trouve que par la conception, django ne met pas à jour le champ M2M avant d'appeler save(), mais seulement après la sauvegarde() est complète dans le cadre de la forme sauver ...

par exemple dans les deux commandes d'impression ci-dessous les valeurs affichées sont celles de l'utilisateur mis à jour avant l'instance de modèle dans l'admin:

class MyClass(models.Model): 
    an_m2m_field = models.ManyToManyField(MyOtherCLass) 
    def save(self, *args, **kwargs): 
     print self.an_m2m_field.all() 
     super(MyClass, self).save(*args, **kwargs) # Call the "real" save() method. 
     print self.an_m2m_field.all() 

Comment puis-je accéder aux nouvelles valeurs de ce champ dans la commande prioritaire save()?

Répondre

5

Les champs M2M sont enregistrés indépendamment du modèle. Pour agir sur les changements de champ M2M, enregistrez-vous au signal m2m_changed du champ M2M, comme indiqué en détail here.

Questions connexes