django - ManyToManyField in Class Based Generic Views and Save Override -
we have class-based-generic view adds object manytomanyfield relationship. we're trying modify values on save() override relationships created on manytomanyfield, doesn't seem ever created in save(), we're forced call post_save method in get_success_url relationships created. seems very, ugly. how force relationships created before leave save()?
i've seen this answer on so, says override form_valid() create relationship, why need if they're created automatically somewhere between 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() class based generic views. call whenever you're saving payment object. """ invoice in self.invoice.all(): # calcualtions make happy invoice.save() # views.py - 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')
if has done each time payment
saved, it's better leave responsibility model instead of moving view. best way use post_save
signal, this:
in models.py
, somewhere below definition of payment
model:
from django.db.models.signals import post_save django.dispatch import receiver @receiver(post_save, sender=payment) def my_handler(sender, instance, **kwargs): invoice in instance.invoice.all(): # calcualtions make happy invoice.save()
on unrelated note, suggest use plural attribute names m2m fields: invoices
instead of invoice
in case. makes clearer fellow developers.
Comments
Post a Comment