0

I'm trying to create a simple signal that creates a Profile object for a User after the user signs up a new account. What am I missing?

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
#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
winston
  • 3,000
  • 11
  • 44
  • 75

2 Answers2

3

Sometime the django signals just dont work when on seperate file try putting signals code on your models.py like this:

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)
0

To solve this, you can add app's config to either of two files.

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

OR,

  1. In your related app's __init__.py file, like this (in this example, the related app is events): default_app_config = 'events.apps.EventsConfig'
Mehedi
  • 281
  • 3
  • 5