을 저장 한 후 접근 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 신호를 사용하여 시도했지만,이 같은 방식으로 작동합니다. 첫 번째 저장시 변경 사항이 없으며 변경 사항은 두 번째 저장됩니다.
는 업데이트 :이 코드를 해결해야 할 것 같습니다 :
모델은 저장 한 후 M2M 관계는 부모 개체의 PK를 얻기 위해, 저장되기 때문에입니다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()
는 내가 재 설계에 대해 생각하는 것입니다. 송장을 변경해야한다면 어떤 일이 일어날 지 의도 한대로 작동했다고해도? 네가 그것을 구할 때 책이 두 번 판매 된 것처럼 보일 것이다. –
네, 사실입니다 : 내 연구의 두 번째 부분은 이미 저장되어 있는지 확인하기 위해 instance_id을 추적 ... 내가 필요로 그냥 뭐 수 있습니다 장고 1.2에서 m2m_changed 생각 ... – tufelkinder