Modifying Django's pre_save/post_save Data

Posted by Rodrogo on Stack Overflow See other posts from Stack Overflow or by Rodrogo
Published on 2010-12-26T20:04:51Z Indexed on 2010/12/26 20:54 UTC
Read the original article Hit count: 158

Filed under:
|

Hi,

I'm having a hard time to grasp this post_save/pre_save signals from django.

What happens is that my model has a field called status and when a entry to this model is added/saved, it's status must be changed accordingly with some condition.

My model looks like this:

 class Ticket(models.Model):    
    (...)   
    status = models.CharField(max_length=1,choices=OFFERT_STATUS, default='O')

And my signal handler, configured for pre_save:

def ticket_handler(sender, **kwargs):
   ticket = kwargs['instance']
   (...)
   if someOtherCondition:
       ticket.status = 'C'

Now, what happens if I put aticket.save() just bellow this last line if statement is a huge iteration black hole, since this action calls the signal itself. And this problem happens in both pre_save and post_save.

Well... I guess that the capability of altering a entry before (or even after) saving it is pretty common in django's universe. So, what I'm doing wrong here? Is the Signals the wrong approach or I'm missing something else here?

Also, would it be possible to, once this pre_save/post_save function is triggered, to access another model's instance and change a specific row entry on that?

Thanks

© Stack Overflow or respective owner

Related posts about django

Related posts about django-signals