gpt4 book ai didi

python - 永远不会调用 Django m2m_changed 信号

转载 作者:太空狗 更新时间:2023-10-29 17:20:14 28 4
gpt4 key购买 nike

我不明白为什么我的 m2m_changed 信号没有被触发。

代码如下:

模型.py

class Badge(TimeStampable, Expirable, Deactivable,
SafeDeleteModel):
_safedelete_policy = HARD_DELETE

owner = models.ForeignKey(settings.AUTH_USER_MODEL,
blank=True, null=True,
on_delete=models.PROTECT)
restaurants = models.ManyToManyField(Restaurant)
identifier = models.CharField(max_length=2048)

objects = SafeDeleteManager.from_queryset(BadgeQuerySet)()

信号.py

from django.db.models.signals import m2m_changed
from django.dispatch import receiver

from .models import Badge

@receiver(m2m_changed, sender=Badge.restaurants.through)
def my_callback(sender, **kwargs):
print("M2M has been changed!")

apps.py(this post 建议更改此文件)

from django.apps import AppConfig

class BadgesConfig(AppConfig):
name = 'badges'

def ready(self):
import badges.signals

当进入 shell 时:

  • m2m_changed.receivers 返回一个空列表(它不起作用,信号永远接收不到)

我找到了 similar post却没有在其中找到答案。

为什么 m2m_changed 信号不起作用?

编辑

当打开 shell 并导入 badges.signals 时,它起作用了。这意味着问题出在 apps.py 中:

In [1]: from django.db.models.signals import m2m_changed

In [2]: m2m_changed.receivers
Out[2]: []

In [3]: import badges.signals

In [4]: m2m_changed.receivers
Out[4]:
[((4551224720, 4520068792),
<weakref at 0x10f4da5e8; to 'function' at 0x10f462d90 (check_uniqueness)>)]

最佳答案

我在 this section 中发现了我的错误Django 的文档。从一开始,我的应用程序配置就从未被调用过!

其实要正确注册一个app,我有两个方法:

方法一

INSTALLED_APPS = ['徽章', ...]

并在 __init__.py 中声明:default_app_config = 'badges.apps.BadgesConfig'

方法二

INSTALLED_APPS = ['badges.apps.BadgesConfig']

我的错误

我在使用 INSTALLED_APPS = ['badges', ...] 时没有在 __init__.py 中声明任何内容

我认为当 Django 注意到 apps.py 在文件夹应用程序中但从未使用过时,它可能会显示警告。

关于python - 永远不会调用 Django m2m_changed 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50625454/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com