これは私を困惑させています...モデルを保存しても、本のオブジェクトは変更されていません。しかし、請求書を開いて再度保存すると、変更が加えられます。私は何が間違っているのですか?
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()
編集: post_saveシグナルを使用してみましたが、同じように機能します。最初の保存では変更はありません。2回目の保存では変更が保存されます。
更新:このコードで解決されるようです:
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()