우리는 ManyToManyField 관계가있는 객체를 추가하는 클래스 기반 일반 뷰를 사용합니다. 우리는 을 사용하여 ManyToManyField에서 생성 된 관계에 대해 save()의 일부 값을 수정하려고 시도하지만, save()에서 이 생성 된 것처럼 보이지 않으므로 post_save 메소드를 호출해야합니다. get_success_url이므로 관계가 만들어집니다. 이것은 매우, 아주 못생긴 것 같습니다. save()를 떠나기 전에 관계를 강제로 만들려면 어떻게해야합니까?클래스 기반 일반 뷰의 ManyToManyField 및 저장 무시
this answer on SO은 form_valid()를 오버라이드하여 관계를 만드는 것을 보았습니다. 그러나 form_valid()와 get_success_url() 사이에 자동으로 생성 된 경우이 작업을 수행해야하는 이유는 무엇입니까? 이것은 Payment
가 저장 될 때마다 수행해야하는 경우
# models.py
class Payment(models.Model):
invoice = models.ManyToManyField(Invoice)
deposit_date = models.DateField()
check_number = models.CharField(max_length=100, blank=True, null=True)
description = models.TextField(blank=True, null=True)
def post_save(self):
"""
ManyToManyField relationships aren't formed yet when overriding save() for Class Based Generic
Views. Call this whenever you're saving a Payment object.
"""
for invoice in self.invoice.all():
# Do some calcualtions that make us happy
invoice.save()
# views.py - We override get_success_url() in UpdateView too.
class PaymentAdd(CreateView):
model = Payment
form_class = PaymentForm
context_object_name = 'object'
template_name = 'form.html'
def get_success_url(self):
self.object.post_save()
return reverse('payment-page')