Try this out and see what happens:

def _hook_post_save_answer(instance, created, sender, **kwargs):
    if created:
        if instance.user:
            quser = instance.user.get_profile()
            quser.increment_answers()
        instance.question.increment_responses()

post_save.connect(_hook_post_save_answer, sender=Answer)

On Apr 23, 6:20 pm, Jim N <jim.nach...@gmail.com> wrote:
> OK, that makes total sense.
>
> I've implemented it like so:
>
> def _hook_post_save_answer(instance, sender, **kwargs):
>     if 'created' in kwargs and kwargs['created'] == True:
>         if instance.user:
>             quser = instance.user.get_profile()
>             quser.increment_answers()
>         instance.question.increment_responses()
>
> post_save.connect(_hook_post_save_answer, sender=Answer)
>
> http://dpaste.de/897o/
>
> But now, it increments TWICE!
>
> Is there some glaring error in my logic above?
>
> On Apr 23, 4:50 pm, Nick Serra <nickse...@gmail.com> wrote:
>
>
>
> > I didn't even think of that. It's not very common to be specifying
> > pk's on create anyway, so yours would probably be fine. I just think
> > signals are cleaner and use them when I can :)
>
> > On Apr 23, 4:47 pm, Skylar Saveland <skylar.savel...@gmail.com> wrote:
>
> > > Yeah, and I think my suggestion fails for a user-defined rather than
> > > auto-incrementing pk.
>
> > > On Apr 23, 4:21 pm, Nick Serra <nickse...@gmail.com> wrote:
>
> > > > A post save signal seems better suited for this. The post save signal
> > > > has an attribute 'created' that will be true or false depending on if
> > > > the object is being created or updated. Check out the post_save
> > > > documentation:http://docs.djangoproject.com/en/dev/ref/signals/#django.db.models.si...
>
> > > > On Apr 23, 3:32 pm, Skylar Saveland <skylar.savel...@gmail.com> wrote:
>
> > > > > On Apr 23, 3:27 pm, Jim N <jim.nach...@gmail.com> wrote:
>
> > > > > > Hi,
>
> > > > > > I have overridden the default save() on a model so that I can update
> > > > > > some counts every time a save occurs.  Unfortunately, I don't want 
> > > > > > to
> > > > > > perform these actions every time the model is updated, which seems 
> > > > > > to
> > > > > > happen.
>
> > > > > > Is there another approach I can take that distinguishes between save
> > > > > > and update?
>
> > > > > > class Answer(models.Model):
> > > > > >     answer = models.TextField()
> > > > > >     user = models.ForeignKey(User, null=True)
> > > > > >     submit_date = models.DateTimeField('Date Submitted',
> > > > > > default=datetime.datetime.now)
> > > > > >     question = models.ForeignKey(Question)
> > > > > >     permalink = models.CharField(max_length=300, blank=True)
>
> > > > > >     def save(self, *args, **kwargs):
> > > > > >         super(Answer, self).save(*args, **kwargs) # Call the "real"
> > > > > > save() method.
> > > > > >         if(self.user):
> > > > > >             quser = self.user.get_profile()
> > > > > >             quser.increment_answers()   # <-- I don't want to do 
> > > > > > this
> > > > > > on an update.
> > > > > >             self.question.increment_responses() # <-- I don't want 
> > > > > > to
> > > > > > do this either.
>
> > > > > > Or in more readable form:http://dpaste.de/I2IR/
>
> > > > > Before you call super you can see if bool(self.pk) is True or False.
> > > > > It will be False before the first save.
>
> > > > > --
> > > > > You received this message because you are subscribed to the Google 
> > > > > Groups "Django users" group.
> > > > > To post to this group, send email to django-us...@googlegroups.com.
> > > > > To unsubscribe from this group, send email to 
> > > > > django-users+unsubscr...@googlegroups.com.
> > > > > For more options, visit this group 
> > > > > athttp://groups.google.com/group/django-users?hl=en.
>
> > > > --
> > > > You received this message because you are subscribed to the Google 
> > > > Groups "Django users" group.
> > > > To post to this group, send email to django-us...@googlegroups.com.
> > > > To unsubscribe from this group, send email to 
> > > > django-users+unsubscr...@googlegroups.com.
> > > > For more options, visit this group 
> > > > athttp://groups.google.com/group/django-users?hl=en.
>
> > > --
> > > You received this message because you are subscribed to the Google Groups 
> > > "Django users" group.
> > > To post to this group, send email to django-us...@googlegroups.com.
> > > To unsubscribe from this group, send email to 
> > > django-users+unsubscr...@googlegroups.com.
> > > For more options, visit this group 
> > > athttp://groups.google.com/group/django-users?hl=en.
>
> > --
> > You received this message because you are subscribed to the Google Groups 
> > "Django users" group.
> > To post to this group, send email to django-us...@googlegroups.com.
> > To unsubscribe from this group, send email to 
> > django-users+unsubscr...@googlegroups.com.
> > For more options, visit this group 
> > athttp://groups.google.com/group/django-users?hl=en.
>
> --
> You received this message because you are subscribed to the Google Groups 
> "Django users" group.
> To post to this group, send email to django-us...@googlegroups.com.
> To unsubscribe from this group, send email to 
> django-users+unsubscr...@googlegroups.com.
> For more options, visit this group 
> athttp://groups.google.com/group/django-users?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to