User post_save signal to auto create 'admin' profile

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# SIGNALS AND LISTENERS
from django.contrib.auth.models import User
from django.db.models import signals
from django.dispatch import dispatcher

# User
def user_post_save(sender, instance, signal, *args, **kwargs):
    # Creates user profile
    profile, new = UserProfile.objects.get_or_create(user=instance)

dispatcher.connect(user_post_save, signal=signals.post_save, sender=User)

More like this

  1. convenience parent class for UserProfile model by willhardy 4 years, 11 months ago
  2. Alternative to User.get_profile() by jpwatts 6 years ago
  3. Little middleware that create a facebook user by marinho 6 years, 4 months ago
  4. Improved User Admin by gregb 3 years, 11 months ago
  5. filter dates to user profile's timezone by Scanner 7 years ago

Comments

JoshuaJenkins (on November 11, 2008):

This is no longer valid as the way dispatcher works has been updated.

Any shot at an update?

#

sasha (on November 12, 2008):

For Django 1.0:

def user_post_save(sender, instance, **kwargs):
    profile, new = UserProfile.objects.get_or_create(user=instance)

models.signals.post_save.connect(user_post_save, sender=User)

#

ori (on February 21, 2011):

For Django 1.3, using the new @receiver decorator:

from django.db.models.signals import post_save
from django.dispatch import receiver

@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
    """Create a matching profile whenever a user object is created."""
    if created: 
        profile, new = UserProfile.objects.get_or_create(user=instance)

#

thisnameagain (on May 11, 2011):

Hello, was playing around with signals and came across an issue. Was able to use the receiver decorator approach from Ori when using the built in signals (i.e. post_save, etc.) put when I tried to use that approach with a custom signal it does not work.

I confirmed that the custom signal works if I use the approach

custom_signal.connect(custom_receiver)

and all works. but

@receiver(custom_receiver, sender=MyModel) def signal_receiver(sender, **kwargs) print 'in signal_receiver'

This does not work, does the decorator approach not work with custom signals?

Thanks

#

(Forgotten your password?)