Задать вопрос

Тел: +7 965 3737 888





User post_save signal to auto create 'admin' profile

<p><strong>How to use:</strong></p>
<ol><li>puts this code at the end of the models.py file who haves the User Profile class declared;</li>
<li>verify if your User Profile class has the name 'UserProfile'. If not, change the code to the right name.</li>
</ol><p><strong>About:</strong> this snippet makes the ORM create a profile each time an user is created (or updated, if the user profile lost), including 'admin' user.</p>

Вопрос полезен? Да0/Нет0

Ответы (4):

Ответ полезен? Да0/Нет0

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


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?


Ответ полезен? Да0/Нет0

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)

Ответ полезен? Да0/Нет0

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)

Ответ полезен? Да0/Нет0

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

Any shot at an update?