django - signals not working

后端 未结 3 2055
谎友^
谎友^ 2020-12-08 00:14

I am trying to create activity streams of users from their status.

models:

class Status(models.Model):
    body = models.TextField(max_length=200)
           


        
相关标签:
3条回答
  • 2020-12-08 00:55

    Seems like your post_save.connect is not executed. You should import signals somewhere. For django 1.7 it is recommended to do this in the app's config ready() function. Read the "Where should this code live?" side note in the docs.

    For example if your app is called activity:

    activity/__init__.py

    default_app_config = 'activity.apps.ActivityAppConfig'
    

    activity/apps.py

    from django.apps import AppConfig
    
    class ActivityAppConfig(AppConfig):
        name = 'activity'
    
        def ready(self):
            import activity.signals
    

    And don't forget to add dispatch_uid to your connect() call:

    post_save.connect(create_activity_item, sender=Status,
                      dispatch_uid="create_activity_item")
    

    UPDATE: name attribute of ContentType is always in lower case. So you should change the if statement to:

    if ctype.name == 'status':
    
    0 讨论(0)
  • 2020-12-08 01:06

    Without touching apps.py this worked for me.

    class MyModel(models.Model):
        """ MyModel fields go """
        body = models.TextField(max_length=200)
        pub_date = models.DateTimeField(auto_now_add=True, auto_now=False)
    
    
    def post_save_actions(sender, instance, created, **kwargs):
        if created:
            pass
            # post save actions if new instance is created,
            # do something with `instance` or another models
            # be careful about circular imports. \m/
    

    and the signals hook,

    post_save.connect(post_save_user_actions, sender=MyModel)
    
    0 讨论(0)
  • 2020-12-08 01:13

    let's say your apps name is blog, in the settings.py file of your project ensure to register the blog app in the INSTALLED_APP variable of your main project's settings.py file as blog.apps.BlogConfig and not just blog. That worked for me.

    0 讨论(0)
提交回复
热议问题