im essayant de connecter une "information" objet à de nombreux "clients" (voir code ci-dessous)
Lorsqu'un objet d'information est mis à jour, je souhaite envoyer un courrier électronique à chaque client qui est connecté aux informations. P >
Cependant, lorsque je connecte le champ Sold_to que le signal reçoit toujours ce que les données sont comme avant la sauvegarde. P>
Je suppose que c'est parce que son multilingfield et les données sont stockées dans Une table séparée, mais ne devrait pas être appelée le signal Post_save après avoir été mis à jour? P>
Quelqu'un a une suggestion d'une solution? P>
class Customer name = models.CharField(max_length=200) category = models.ManyToManyField('Category',symmetrical=False) contact = models.EmailField() class Information name = models.CharField(max_length=200) email = models.EmailField(max_length=200) mod_date = models.DateTimeField(auto_now=True) sold_to = models.ManyToManyField(Customer, null=True, blank=True) def send_admin_email(sender, instance, signal, *args, **kwargs): from myapp import settings for cust in instance.sold_to.all(): settings.debug(cust.name) post_save.connect(send_admin_email, sender=Information)
3 Réponses :
Il y a un ticket ouvert pour le problème à laquelle vous êtes confronté à ici . Vous pouvez soit garder un œil sur cela pour quand il en fait une libération, ou vous pouvez essayer d'appliquer le patch qu'il fournit et voyez si cela aide. P>
Merci pour la réponse rapide. J'ai essayé le patch et après un petit piratage, je l'ai eu pour travailler. Postera la solution ci-dessous.
Ceci est ma solution, après avoir appliqué le patch à partir de code.djangoproject.com mentionné ci-dessus.
a ajouté ceci dans modèles.pycops.pycumxx x/pre >p> et la fonction Send_Admin_Email : p>
Je rencontre dans le même problème depuis que j'ai des champs M2M dans mon modèle, j'ai aussi reçu les données pré_save.
Dans la situation, le problème est que dans les champs M2M, les deux modèles associés doivent être enregistrés afin d'obtenir les identifiants automatiques générés. P>
Dans ma solution, ni j'ai utilisé le signal post_save, ni le signal M2M_Changed, au lieu de ces signaux, j'ai utilisé log_addition et log_change méthodes dans la définition de classe MODERADMIN. p>
dans votre classe ModelAdmin CustomAdmin: P>
class CustomModelAdmin(admin.ModelAdmin): def log_addition(self, request, object): """ Log that an object has been successfully added. """ super(CustomModelAdmin, self).log_addition(request, object) #call post_save callback here object created def log_change(self, request, object): """ Log that an object has been successfully changed. """ super(CustomModelAdmin, self).log_change(request, object) #call post_save callback here object changed
J'aime la solution. Dans Django 3, log_addition, log_change Prenez 3 arguments de position comme log_addition (demande, objet, message) ou log_change (demande, objet, message). omission que le troisième argument augmentera une erreur