问题描述
我有用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
所有正常工作,无异常,错误。但是它不会为新用户创建配置文件。 注意:
解决方法
首先,如果您更改了用户模型或尝试使用其他模型作为用户模型,请不要忘记将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'