Django信号不适用于我的目录结构

时间:2018-07-06 03:11:15

标签: django django-signals

我正在尝试为我的应用实现信号,并且目录结构如下所示

- src
    - utility_apps
        __init__.py
        - posts
            - migrations
            - static
            - templates
            admin.py
            views.py
            apps.py
            signals.py
            models.py
            __init__.py
            ......

    static
    manage.py
    ......

这里posts是我的应用,而signals.py在它的文件夹中,但是我的信号不起作用。 我已将信号代码定义为-

from .models import Post
from django.db.models.signals import post_save
from django.dispatch import receiver

@receiver(post_save, sender=Post)
def give_group_owner_permission(sender, instance, created, **kwargs):
    print("coming to signal")
    if created:
        print("created")

但是它不起作用。在我的apps.py中,将ready函数更改为

class Post(AppConfig):
    name = 'post'

    def ready(self):
        import utility_apps.posts.signals

我什至尝试在ready函数中导入posts.signal。我在这里做错了,请帮忙

我已安装的应用程序如下所示

INSTALLED_APPS = [
    'utility_apps.posts',
    'mainapp',
     .....
]

1 个答案:

答案 0 :(得分:0)

以下解决方案对我有用。

我要做的第一项更改是将default_app_config应用的__init__.py文件中的posts值放在

default_app_config = 'utility_apps.posts.apps.PostsConfig'

然后我不得不将PostsConfig类更改为

class PostsConfig(AppConfig):
    name = 'utility_apps.posts'

    def ready(self):
        import utility_apps.posts.signals

基本上我必须更改两件事-

  1. 默认情况下设置为posts的名称
  2. 更改就绪功能并在其中导入信号

对我有用。 另外,我也可以将PostsConfig包含在已安装的应用程序中。