我正在使用 Django 默认接收器来处理信号。但它不工作。 每当新的用户对象在 APP2 signal.py 中创建一个接收器时,我就修改了 APP1 中的用户模型,但它不起作用。
app1/模型.py
class User(BaseModel, AbstractBaseUser, PermissionsMixin):
email = models.EmailField(
verbose_name='email address',
max_length=255,
unique=True,
)
username = models.CharField(max_length=40, unique=True)
first_name = models.CharField(max_length=30, blank=True, null=True)
last_name = models.CharField(max_length=30, blank=True, null=True)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
is_email_verified = models.BooleanField(default=False)
is_paid = models.IntegerField(default=0)
access_token = models.CharField(max_length=128, blank=True)
objects = UserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
class Meta:
db_table = 'users'
def __str__(self):
return self.email
app2/signals.py
from django.conf import settings
from django.db.models.signals import post_save
from django.dispatch import receiver
from accounts.models import User
@receiver(post_save, sender=User)#settings.AUTH_USER_MODEL)
def create_auth_token(sender, instance=None, created=False, **kwargs):
print ("token generated")
if created:
print("data at signal ****", instance.email, instance)
最佳答案
我终于得到了答案。这是因为我没有在启动时导入 signals.py。
工作代码
应用程序.py
from __future__ import unicode_literals
from django.apps import AppConfig
class StreamsConfig(AppConfig):
name = 'streams'
def ready(self):
print("at ready")
import streams.signals
初始化.py
default_app_config = 'streams.apps.StreamsConfig'
此更改后我收到信号
更新:
根据更新应用程序的 django 3.0 文档,如果您使用应用程序配置的点路径,则不需要在 init.py 中添加 default_app_config。 https://docs.djangoproject.com/en/3.0/ref/applications/#django.apps.AppConfig.ready
只是替换
INSTALLED_APPS = (
...,
'streams',
)
与
INSTALLED_APPS = (
...,
'streams.apps.StreamsConfig',
)
它会起作用。
关于python - Django 信号未接收/工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45859465/