Django signals not working properly

前端 未结 3 1671
你的背包
你的背包 2020-12-19 11:22

I\'m trying to setup a signal so that when a valid form is saved, a function is ran to carry out a related task.

My app structure is as follows;

- ev         


        
3条回答
  •  暖寄归人
    2020-12-19 12:04

    I've used signals in some of my projects and I allways import the signals in the __init__.py of my Django APP (Same folder as settings.py, views.py, urls.py...)

    __init__.py:

    import signals
    

    signals.py:

    from django.db.models.signals import post_save, pre_delete 
    from django.dispatch import receiver
    from my_project.models import *
    
    
    @receiver(post_save, sender=Modelname)  # Called after an object is saved
    def create_modelname(sender, **kwargs):
        obj = kwargs['instance']  # I get the object being saved here
        # ... Here I do whatever I want
    
    @receiver(pre_delete, sender=Modelname)  # Called before an object is deleted
    def delete_modelname(sender, **kwargs):
       obj = kwargs['instance']
       # ... Do whatever you need
    

    Remember this 2 imports:

    • from django.db.models.signals import post_save, pre_delete
    • from django.dispatch import receiver

    Remember to import the signals

    • To import the signals you need to add import signals in your __init__.py of your project

    Using this code, this functions are called automatically by Django when an object of the class Modelname is created or deleted.

    The receiver for created object is called after the object is created, and the receiver for deleted object is called before the object is deleted.

提交回复
热议问题