![](/img/trans.png)
[英]How can i make signals in django which can differentiate between put and post method?
[英]How can I correctly make signals in django 3?
我在 django3(python 3.8)上编写了用户应用程序。 和 model 配置文件,它正在扩展用户 model。 所以我想每次用户创建帐户时都这样做,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, instance, **kwargs):
instance.profile.save()
这是我的用户/apps.py:
from django.apps import AppConfig
class UsersConfig(AppConfig):
name = 'users'
def ready(self):
import users.signals
所有工作,没有例外,错误。 但它不会为新用户创建配置文件。 笔记:
ready
方法中写了print()
。 但它不打印。 First of all if you have changed your User model or trying to use some other model as your user model, don't forget to Add line AUTH_USER_MODEL = 'users.User'
to your settings.py
(change the 'users.User' to您的用户应用程序的路径)告诉 Django 您正在使用另一个 model 而不是默认用户 model。 然后在您的信号中,而不是from django.contrib.auth.models import User
try 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)
最后,如果您已经完成了这些步骤并且您的信号仍然不起作用,请尝试在您的users
应用程序的__init__.py
中添加以下行:
default_app_config = 'users.apps.UsersConfig'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.