2009-12-15 18 views
7

Nella mia app ho la AUTH_PROFILE_MODULE insieme a users.UserProfile. Questo profilo utente ha una funzione create che dovrebbe essere chiamata, quando un nuovo utente si registra e quindi crea la voce UserProfile.django-registrazione e la creazione del profilo utente

In base alla documentazione di registrazione di django, tutto ciò che è necessario fare è impostare la voce profile_callback nel mio urls.py. Il mio aspetto:

url(r'^register/$', register, {'form_class': RecaptchaRegistrationForm, 
'profile_callback': UserProfile.objects.create, 
'backend': 'registration.backends.default.DefaultBackend',}, 
name='registration_register') 

ma ottengo questo errore:

Exception Value: register() got an unexpected keyword argument 'profile_callback'

Allora, dove devo mettere questo, per farlo funzionare?

risposta

11

Quale versione di django-registrazione stai usando? E a quale versione della registrazione di django ti riferisci? Non sapevo di questo profile_callback.

Un altro modo per ottenere ciò che stai cercando è quello di utilizzare i segnali Django (http://docs.djangoproject.com/en/dev/topics/signals/). L'applicazione di registrazione di Django ne fornisce alcuni.

Un modo per raggiungere questo obiettivo è quello di creare un signals.py nel progetto (o l'applicazione) e collegato ai segnali come la documentazione detto. Quindi importa il modulo segnali nel tuo file init .py o urls.py per assicurarti che venga letto quando viene eseguito il tuo progetto.

L'esempio che segue è fatto utilizzando i segnali post_save, ma si potrebbe voler utilizzare quelli forniti django-registrazione.

from django.db.models.signals import post_save 
from userprofile.models import UserProfile 
from django.contrib.auth.models import User 

def createUserProfile(sender, instance, **kwargs): 
    """Create a UserProfile object each time a User is created ; and link it. 
    """ 
    UserProfile.objects.get_or_create(user=instance) 

post_save.connect(createUserProfile, sender=User) 
+2

sembra che ho usato una nuova versione di registrazione django e leggere la vecchia documentazione. Ho appena trovato questo nei messaggi di commit: "I segnali personalizzati vengono ora inviati alla registrazione dell'utente e all'attivazione dell'utente.Il meccanismo profile_callback che in precedenza serviva per uno scopo simile è stato rimosso, quindi questo è retrocompatibile." Quindi la soluzione è la strada da percorrere. – Kai

0

Django-registrazione fornisce due segnali, che sono:

  • user_registered: Inviato quando la registrazione è completa
  • user_activated: Inviato quando l'utente ha attivato il suo account utilizzando il link di attivazione

Per il tuo caso, hai bisogno di user_registered

from registration.signals import user_registered 
def createUserProfile(sender, instance, **kwargs): 
    user_profile = UserProfile.objects.create(user=instance) 

user_registered.connect(createUserProfile) 

non hai bisogno di creare qualsiasi tipo di file signals.py separato. Puoi conservare questo codice in models.py di una qualsiasi delle tue app. Tuttavia, dal suo codice di creazione del profilo, dovresti tenerlo in profili/models.py

Problemi correlati