Поймать post_save сигнал - PullRequest
       18

Поймать post_save сигнал

0 голосов
/ 24 апреля 2020

Django 3.0.5.

apps.py

from django.apps import AppConfig
from django.db.models.signals import post_save
from django.dispatch import receiver

class NewsConfig(AppConfig):
    name = 'news'

    def ready(self):
        from .models import News # Breakpoint 0

        @receiver(post_save, sender=News)
        def handle_news_save(sender, **kwargs):
            print("Working")
            a = 0 # Breakpoint 1

models.py

class News(models.Model):
    news_text = models.TextField()

settings.py

INSTALLED_APPS = [
     ...
    'news.apps.NewsConfig',
]

Проблема

В точке останова 0 интерпретатор останавливается, когда я запускаю применение. То есть на следующей строке Django узнает, что я ловлю сигнал.

Но когда я сохраняю экземпляр News на сайте администратора, в точке останова 1 интерпретатор не останавливается. И, конечно же, никакой печати не происходит. Не могли бы вы помочь мне поймать сигнал?

1 Ответ

1 голос
/ 25 апреля 2020

Хорошо, я попробовал это и немного поиграл с сигналами, вот что я обнаружил:

Поскольку состояние вопроса, этот способ определения не работает, кажется, что он не регистрирует сигнал правильно. Я понятия не имею, почему это не так.

Я предполагаю, что соглашение о сигналах будет в любом случае перемещать их в файл signals.py, а затем в apps.py вы только импортируете их.

signal.py:

from .models import News  # Breakpoint 0
from django.db.models.signals import post_save
from django.dispatch import receiver


@receiver(post_save, sender=News)
def handle_news_save(sender, **kwargs):
    print("Working")
    a = 0  # Breakpoint 1

apps.py:

from django.apps import AppConfig
from django.db.models.signals import post_save
from django.dispatch import receiver


class PollsConfig(AppConfig):
    name = 'polls'

    def ready(self):
        import polls.signals

и тогда это работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...