django信号在创建用户时不创建用户档案

0 人关注

我试图创建一个简单的信号,在用户注册新账户后为其创建一个简介对象。我错过了什么?

信号.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
#from django_cleanup.signals import cleanup_pre_delete
#from sorl.thumbnail import delete
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance, bio="", linkedin_URL="", isCoach=False)
@receiver(post_save, sender=User)
def save_profile(sender, instance, **kwargs):
    instance.profile.save()
# def sorl_delete(**kwargs):
#     delete(kwargs['file'])
# cleanup_pre_delete.connect(sorl_delete)

apps.py

from django.apps import AppConfig
class EventsConfig(AppConfig):
    name = 'events'
    def ready(self):
        import events.signals
    
4 个评论
我的意思是你在哪个应用程序中使用singals.py?
那是正确的。应用程序'events'包含有Profile模型的model.py
试试 from . import signals 。另外,你不需要两个方法,删除第二个。
添加了那个导入,并删除了第二个方法,没有成功。
python
django
winston
winston
发布于 2020-06-23
2 个回答
Nischal Shrestha
Nischal Shrestha
发布于 2021-01-06
已采纳
0 人赞同

有时django的信号在单独的文件中不工作,试着把信号代码放在models.py上,像这样。

from django.db.models.signals import post_save
#signals_section
def create_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance, bio="", linkedin_URL="", isCoach=False)
def save_profile(sender, instance, **kwargs):
    instance.profile.save()
post_save.connect(create_profile, sender=User)
post_save.connect(save_profile, sender=User)
    
你认为为什么会发生这种情况?
Mehedi
Mehedi
发布于 2021-01-06
0 人赞同

为了解决这个问题,你可以在两个文件中的任何一个添加 app's config

  • In your settings.py file's INSTALLED_APPS , like mentioned in this link: Django create profile for user signal
  •