【问题标题】:django signals not creating user profile upon user creationdjango 在创建用户时发出未创建用户配置文件的信号
【发布时间】:2020-06-23 03:21:09
【问题描述】:

我正在尝试创建一个简单的信号,以便在用户注册新帐户后为用户创建 Profile 对象。我错过了什么?

信号.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

【问题讨论】:

  • 应用名称是“事件”吗?我的意思是您在哪个应用程序中使用 singals.py ?
  • 没错。应用“事件”包含具有 Profile 模型的 model.py
  • 试试from . import signals。另外你不需要两个方法,删除第二个。
  • 加了那个导入删除了第二种方法,没用

标签: python django


【解决方案1】:

有时 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)

【讨论】:

    【解决方案2】:

    要解决此问题,您可以将app's config 添加到两个文件中的任意一个。

    1. 在您的settings.py 文件的INSTALLED_APPS 中,如此链接中所述: Django create profile for user signal

    或,

    1. 在您相关的app__init__.py 文件中,像这样(在本例中,相关的应用程序是events):default_app_config = 'events.apps.EventsConfig'

    【讨论】:

      猜你喜欢
      • 2020-08-18
      • 2012-07-14
      • 1970-01-01
      • 1970-01-01
      • 2017-05-12
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 2019-05-23
      相关资源
      最近更新 更多