Django сигналы не работают для моей структуры каталогов - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь реализовать сигналы для моего приложения, и моя структура каталогов выглядит следующим образом

- 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

Я даже пытался импортировать posts.signal в функцию готовности. Что я тут не так делаю, помогите пожалуйста

Мои установленные приложения выглядят как показано ниже

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

1 Ответ

0 голосов
/ 07 июля 2018

У меня сработало следующее решение.

Первое изменение, которое я должен был сделать, это поместить значение 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 в мое установленное приложение.

...