J'ai une application d'enregistrement d'équipe. Un utilisateur s'inscrit pour faire partie de l'équipe. Quand ils le font, la vue ajoute un membre de l'équipe et ajoute l'utilisateur dans la base de données auth. Toutefois, lorsque le modèle d'équipe renvoie des données non valides, la méthode user.save() ajoute le nom d'utilisateur, le mot de passe et l'adresse e-mail. Ainsi, lorsqu'un utilisateur corrige l'inscription de l'équipe et clique sur Soumettre, on lui dit maintenant que le nom d'utilisateur est pris.Création simultanée d'une inscription utilisateur et d'un utilisateur django. La méthode Save consiste à ajouter un utilisateur quel que soit le formulaire valide.
Ce que je veux arriver, c'est que le nom d'utilisateur, etc., soit ajouté APRÈS la validation de l'équipe.
Des suggestions?
est ici le point de vue:
def register(request, **kwargs):
if request.method == 'POST':
form = SimpleRegForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
email = form.cleaned_data['email']
password = form.cleaned_data['password1']
user = User.objects.create_user(username, email, password)
user.save()
form.save()
# Send an email to the admin letting them know that a person registered
subject = render_to_string('teamregistration/email_subject.txt')
message = render_to_string('teamregistration/email_body.txt',
{'first_name':form.cleaned_data['first_name'], 'last_name':form.cleaned_data['last_name'], 'tbi_region':form.cleaned_data['tbi_region']})
recipients = ['[email protected]', '[email protected]']
send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, recipients)
return HttpResponseRedirect('/tbi-team-register/registration-submitted/')
else:
form = SimpleRegForm()
return render_to_response('teamregistration/form.html', {'form':form}, context_instance=RequestContext(request))
Je ne vois pas où le traitement d'appartenance d'équipe est fait dans cet exemple, juste le formulaire d'inscription d'utilisateur est traité (et deux fois, il apparaît). Cela me semble être une simple question de priorité: assurez-vous que les données pour les deux sont correctes, puis enregistrez les deux. Si vous ne pouvez pas faire cela, vous pouvez regarder dans le décorateur "Commit On Success" de Django, ce qui provoquera l'annulation automatique de toutes les transactions dans une vue donnée si une transaction échoue. –
c'est une réponse encore plus élégante. Mais ... dork que je suis. Tout ce que je devais faire était de supprimer le user.save(). Cela a résolu le problème, en limitant la sauvegarde à la forme.save() –