我正在尝试设置一个信号,以便在保存有效表格时运行一个函数来执行相关任务。

我的应用程序结构如下;

- events
    - helpers
        - __init__.py
        - status.py
    - models
        - signals
            - __init__.py
            - event.py
        - __init__.py
        - event.py
        - status.py
    - views
        - __init__.py
        - event.py

我认为信号需要在模型之前尽早导入,因此在models/__init__.py的顶部,我有from .signals import *
# views/event.py
class AddEventView(CreateView):
    """
    View for adding an Event.
    """
    model = Event
    form_class = EventForm
    success_url = reverse_lazy('events:all_events')

    def form_valid(self, form):
        self.object = form.save()

        signals.event_status.send(
            sender=None, request=self.request, event=self.object, status=None
        ) # Should the sender be self.object?

        return super(AddEventView, self).form_valid(form)

# signals/event.py
from django.dispatch import Signal
event_status = Signal(providing_args=["request", "event", "status"])

# helpers/status.py
from ..models import Status, StatusHistory
from ..models.signals import event_status


def create_status(sender, **kwargs):
    """
    Create a status for a given event.
    """
    event = kwargs['event']
    status = kwargs['status']
    creator = User.objects.get(pk=event.creator)
    try:
        current_status = StatusHistory.objects.filter(
            event=event).order_by('timestamp')[0]
    except IndexError:
        # Not sure what we're doing here yet.
        pass
    if not status:
        status = Status.objects.get(description=_("Submitted"))

    statushistory = StatusHistory.create(
        event=event,
        event_status=status,
        user=creator
    )
    statushistory.save()

event_status.connect(create_status)

我在Pycharm中运行调试服务器,但在create_status()函数中有一个断点,而且它从未被击中。

我实现了这个错误吗?

最佳答案

我认为也许您只需要导入helpers/status.py,例如在models/__init__.py

否则,您的event_status信号会正确定义,但信号处理程序create_status永远不会被Django连接

如果您仅对该信号使用一个处理程序,则可以将其与信号定义放在同一模块中

10-05 23:06
查看更多