Actions triggered by field change in Django

后端 未结 7 1048
囚心锁ツ
囚心锁ツ 2020-12-07 23:09

How do I have actions occur when a field gets changed in one of my models? In this particular case, I have this model:

class Game(models.Model):
    STATE_C         


        
7条回答
  •  死守一世寂寞
    2020-12-07 23:38

    It has been answered, but here's an example of using signals, post_init and post_save.

    from django.db.models.signals import post_save, post_init
    
    class MyModel(models.Model):
        state = models.IntegerField()
        previous_state = None
    
        @staticmethod
        def post_save(sender, **kwargs):
            instance = kwargs.get('instance')
            created = kwargs.get('created')
            if instance.previous_state != instance.state or created:
                do_something_with_state_change()
    
        @staticmethod
        def remember_state(sender, **kwargs):
            instance = kwargs.get('instance')
            instance.previous_state = instance.state
    
    post_save.connect(MyModel.post_save, sender=MyModel)
    post_init.connect(MyModel.remember_state, sender=MyModel)
    

提交回复
热议问题