如何解决如何在Django 3中正确发出信号?
我有用django3(python 3.8)编写的用户应用程序。和用于扩展用户模型的模型配置文件。因此,我想每次用户创建帐户时都这样做,django为此自动创建配置文件。我在用户应用上有Signals.py文件:
from django.db.models.signals import post_save
from django.contrib.auth.models import User
from django.dispatch import receiver
from .models import Profile
@receiver(post_save,sender = User)
def create_profile(sender,instance,created,**kwargs):
if created:
Profile.objects.create(user = instance)
@receiver(post_save,sender = User)
def save_profile(sender,**kwargs):
instance.profile.save()
这是我的users / apps.py:
from django.apps import AppConfig
class UsersConfig(AppConfig):
name = 'users'
def ready(self):
import users.signals
所有正常工作,无异常,错误。但是它不会为新用户创建配置文件。 注意:
- 我用
print()
方法写了ready
。但它不会打印。 - 当我在管理站点中创建个人资料时,没有问题。但是为什么信号不起作用?
解决方法
首先,如果您更改了用户模型或尝试使用其他模型作为用户模型,请不要忘记将AUTH_USER_MODEL = 'users.User'
行添加到settings.py
中(更改“用户”。用户”到用户应用的路径),以告知Django您正在使用其他模型而不是默认用户模型。然后在信号中而不是from django.contrib.auth.models import User
尝试使用from django.contrib.auth import get_user_model
并将代码更改为:
from django.db.models.signals import post_save
from django.contrib.auth import get_user_model
from django.dispatch import receiver
from .models import Profile
User = get_user_model()
@receiver(post_save,sender = User)
def create_profile(sender,instance,created,**kwargs):
if created:
Profile.objects.create(user = instance)
最后,如果您已经完成了这些步骤,但仍然表示仍然无法正常运行,请尝试在__init__.py
应用的users
中添加以下行:
default_app_config = 'users.apps.UsersConfig'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。