这让我感到莫名其妙......当我保存模型时,图书对象保持不变。但是,如果我打开发票并再次保存,则会进行更改。我究竟做错了什么?Django:在保存后访问ManyToManyField对象
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信号试过,但它的工作方式相同。第一次保存没有变化,第二次保存更改。
更新:似乎与此代码来解决:
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()
我会考虑重新设计。即使它按照预期工作,如果必须对发票进行更改,会发生什么情况?当你保存它时,它会看起来像书被卖了两次。 – 2010-02-05 00:28:07
是的,这是真的:我的研究的第二部分是跟踪instance_id以查看是否已保存...我认为从Django 1.2开始m2m_changed可能正是我所需要的... – tufelkinder 2010-02-05 14:49:57