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

标签 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 中,我已将就绪函数更改为

class Post(AppConfig):
    name = 'post'

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

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

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

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

最佳答案

以下解决方案对我有用。

我必须做的第一个更改是将 default_app_config 值放入我的 posts 应用程序的 __init__.py 文件中,作为

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 包含在我安装的应用程序中。

关于Django 信号不适用于我的目录结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51202520/

相关文章:

python - 如何在 Django 中安排任务?

python - Django中使用多表继承时是否可以直接设置隐式OneToOne键?

django - 引发 404 并继续 URL 链

Django 喜欢按钮

Django:信号接收器可以返回数据吗?

django - 仅在事务完成后触发 post_save 信号

python - Django + DjangoCMS 信号处理程序未被调用

python - 如何防止使用装饰器在views.py 中处理表单时出现重复代码?

Python:如何创建二元组序列

python - Django/Python:传递的变量在函数中未按预期工作