2010-09-18 5 views
3

Je souhaite ajouter une sélection de paramètres régionaux à l'enregistrement django par défaut. J'ai essayé de suivre ce tutoriel de dmitko. Le formulaire s'affiche correctement mais les données supplémentaires (paramètres régionaux) ne sont pas enregistrées.Ajouter un champ supplémentaire à l'enregistrement de django en utilisant des signaux

J'ai défini un modèle personnalisé:

class AnymalsProfile(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    locale = models.CharField(max_length=2) 

def __unicode__(self): 
    return u'%s %s' % (self.user, self.locale) 

et la forme:

from models import AnymalsProfile 
from registration.forms import RegistrationFormTermsOfService 

class UserRegistrationForm(RegistrationFormTermsOfService): 
    locale = forms.CharField(max_length=3, widget=forms.Select(choices=LOCALE_CHOICES),label='Language:') 

Les champs montrent correctement, mais les données locales (profil) ne sont pas sauvés. Je suppose que le regbackend.py est mon problème:

from anysite.models import AnymalsProfile 

def user_created(sender, user, request, **kwargs): 
     form = UserRegistrationForm(request.POST) 
     data = AnymalsProfile(user=user) 
     data.locale = form.cleaned_data["locale"] 
     data.save() 

from registration.signals import user_registered 
user_registered.connect(user_created) 

* EDIT * J'ai essayé de passer à la production - juste pour un test - et soulevé des erreurs. J'ai modifié le code, mais le profil n'est toujours pas enregistré. Voici ce que j'ai essayé:

from anysite.models import AnymalsProfile 
from anysite.forms import UserRegistrationForm 

def user_created(sender, user, request, **kwargs): 
     form = UserRegistrationForm(request.POST) 
     if form.is_valid(): 
       ProfileData = form.cleaned_data 
       profile = AnymalsProfile(
       user = user.id, 
       locale = ProfileData["locale"] 
         ) 
       profile.save() 

from registration.signals import user_registered 
user_registered.connect(user_created) 

Répondre

0

Avez-vous quelque part dans votre code import regbackend. Cela devrait être fait pour que les chaînes suivantes soient exécutées.

from registration.signals import user_registered 
user_registered.connect(user_created) 

Je mon exemple, j'ai import regbackend dans urls.py. Avez-vous cette ligne aussi?

+0

Nous vous remercions de votre aide. Oui, j'ai importé ça. J'ai essayé autre chose, montré ci-dessus. – tpm

+0

Donc, si vous êtes sûr que user_created est appelé, mais pour une raison quelconque, il n'enregistre pas de données supplémentaires - utilisez la journalisation pour vérifier ce qui se passe réellement. BTW. AnymalsProfile ( user = user, locale = ProfileData ["locale"] ) - pas besoin de passer user.id - juste user – dmitko

0

Je ne sais pas pourquoi, mais elle n'a pas aimé les données de nettoyage. Il fonctionne maintenant en utilisant ce qui suit:

def user_created(sender, user, request, **kwargs): 
     form = UserRegistrationForm(request.POST) 
     data = AnymalsProfile(user=user) 
     data.locale = form.data["locale"] 
     data.save() 

Merci @dmitko pour le code et le support. continuez!

+0

J'ai essayé de faire comme vous, mais j'ai eu cette erreur difficile, pouvez-vous m'aider? https://stackoverflow.com/questions/23695713/django-reg-extend-current-transaction-is-aborted-commands-ignored-until-end-o – KindOfGuy

Questions connexes