У нас есть общее представление на основе классов, которое добавляет объект с отношением ManyToManyField. Мы пытаемся изменить некоторые значения переопределения save() для отношений, созданных в этом ManyToManyField, но похоже, что они никогда не создаются в save(), поэтому мы вынуждены вызывать метод post_save в get_success_url, поэтому отношения создаются. Это кажется очень, очень некрасивым. Как заставить отношения создаваться до того, как мы покинем save()?
Я видел этот ответ на SO, в котором сказано переопределить form_valid() для создания отношений, но зачем мне это делать, если они создаются автоматически где-то между form_valid() и get_success_url()?
# 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')