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)
Nous vous remercions de votre aide. Oui, j'ai importé ça. J'ai essayé autre chose, montré ci-dessus. – tpm
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