django post_save signals on update

后端 未结 2 1552
孤独总比滥情好
孤独总比滥情好 2020-12-28 14:16

I am trying to set up some post_save receivers similar to the following

@receiver(post_save, sender=Game, dispatch_uid=\'game_updated\')
def game_updated(sen         


        
相关标签:
2条回答
  • 2020-12-28 14:43

    update() is converted directly to an SQL statement; it doesn't call save() on the model instances, and so the pre_save and post_save signals aren't emitted. If you want your signal receivers to be called, you should loop over the queryset, and for each model instance, make your changes and call save() yourself.

    0 讨论(0)
  • 2020-12-28 14:57

    Just one more thing to @Ismali Badawi's answer.


    This calls post_save

    user = User.objects.get(id=1) 
    user.username='edited_username' 
    user.save()
    

    This does not call post_save

    User.objects.filter(id=1).update(username='edited_username')
    

    In the code,

    from django.db.models.signals import post_save
    
    @receiver(post_save, sender=User)
    def do_something_when_user_updated(sender, instance, created, **kwargs):
        if not created:
            # User object updated
            user_obj = instance
            pass
    
    0 讨论(0)
提交回复
热议问题