Run model creation code in Django

I want to execute some code in a Django model when it is created. After that, when it is saved, I want to execute another code. The second task can be easily accomplished by overriding the save () method. How can I complete the first task?

+6
source share
2 answers

You can use django post_save signals

 # models.py from django.db.models import signals class MyModel(models.Model): pass def my_model_post_save(sender, instance, created, *args, **kwargs): """Argument explanation: sender - The model class. (MyModel) instance - The actual instance being saved. created - Boolean; True if a new record was created. *args, **kwargs - Capture the unneeded `raw` and `using`(1.3) arguments. """ if created: # your code goes here # django 1.3+ from django.dispatch import dispatcher dispatcher.connect(my_model_post_save, signal=signals.post_save, sender=MyModel) # django <1.3 from django.db.models.signals import post_save post_save.connect(my_model_post_save, sender=MyModel) 
+9
source

Extending sdolan with receiver decorator:

 from django.db import models from django.dispatch import receiver class MyModel(models.Model): pass @receiver(models.signals.post_save, sender=MyModel) def execute_after_save(sender, instance, created, *args, **kwargs): if created: # code 
+21
source

Source: https://habr.com/ru/post/901729/


All Articles