Cela me déroute ... Lorsque je sauvegarde mon modèle, les objets du livre restent inchangés. Mais si j'ouvre la facture et la sauvegarde à nouveau, les changements sont faits. Qu'est-ce que je fais mal?Django: accéder aux objets ManyToManyField après la sauvegarde
class Invoice(models.Model):
...
books = models.ManyToManyField(Book,blank=True,null=True)
...
def save(self, *args, **kwargs):
super(Invoice, self).save(*args, **kwargs)
for book in self.books.all():
book.quantity -= 1
if book.quantity == 0:
book.sold = True;
book.save()
Edit: J'ai essayé d'utiliser le signal de post_save, mais il fonctionne de la même manière. Aucun changement lors de la première sauvegarde, modifications enregistrées la deuxième fois.
Mise à jour: semble être résolu avec ce code:
class InvoiceAdmin(admin.ModelAdmin):
...
def save_model(self, request, obj, form, change):
obj.save()
for bk in form.cleaned_data['books']:
book = Book.objects.get(pk=bk.id)
book.quantity -= 1
if book.quantity == 0:
book.sold = True;
book.save()
Je penserais à la refonte. même si cela fonctionnait comme prévu, que se passerait-il si des modifications devaient être apportées à la facture? quand vous l'avez sauvé, il semblerait que les livres ont été vendus deux fois. –
Oui, c'est vrai: une deuxième partie de mes recherches consiste à suivre l'instance_id pour voir si elle a déjà été sauvegardée ... Je pense que m2m_changed de Django 1.2 pourrait être exactement ce dont j'ai besoin ... – tufelkinder