我正在尝试为我的应用程序实现信号,我的目录结构如下所示
- 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
基本上我必须改变两件事 -
- 默认设置为
posts
的名称 - 更改就绪函数并在其中导入我的信号
这对我有用。 或者,我也可以将 PostsConfig 包含在我安装的应用程序中。
关于Django 信号不适用于我的目录结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51202520/