salut les serpents !
J'ai un petit problème lorsque je veux mettre à jour le profil de l'utilisateur, django me renvoi que l'utilisateur existe déjà, parce que je met à jour l'utilisateur avec le même username.
Pourtant lors de la validation du formulaire j'ai fait en sorte d'exclure l'utilisateur en cours lorsque je vérifie que le nom d'utilisateur n'est pas utilisé. Le message renvoyé parait venir directement de Django car il n'est pas dans mon code.
voici mon form et ma vue :
vue :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 class UserUpdateForm(forms.ModelForm): username = forms.CharField(max_length=100, widget=forms.TextInput(attrs={'name':'username', 'id' : "inputUsername"})) email = forms.EmailField(label="E-mail", widget=forms.TextInput(attrs={'name':'email', 'id' : "inputEmail"})) def __init__(self, *args, **kwargs): initial_arguments = kwargs.get('initial', None) updated_initial = {} if initial_arguments: user = initial_arguments.get('user',None) self.user_id = user.id if user: updated_initial['username'] = getattr(user, 'username', None) updated_initial['email'] = getattr(user, 'email', None) kwargs.update(initial=updated_initial) super(UserUpdateForm, self).__init__(*args, **kwargs) def clean(self): cleaned_data = super(UserUpdateForm, self).clean() username = cleaned_data.get('username') email = cleaned_data.get('email') if User.objects.filter(username=username).exclude(id=self.user_id).exists(): raise forms.ValidationError(u'l\'utilisateur "%s" est déjà utilisé.' % username) elif User.objects.filter(email=email).exclude(id=self.user_id).exists(): raise forms.ValidationError(u'l\'email "%s" est déjà utilisé.' % email) return cleaned_data class Meta: model = User fields = ("username", "email")
ce que django me renvoi : Un utilisateur avec ce nom existe déjà.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 def profile(request): """Allow the user to view their account information.""" user = User.objects.get(id=request.user.id) if request.method == 'POST': form = UserUpdateForm(request.POST, initial={'user':request.user}) try: if form.is_valid() and user: username = form.cleaned_data["username"] email = form.cleaned_data["email"] user.email = email user.username = username user.save() messages.success(request, 'Les modifications de votre profil ont bien été enregistrées') except: messages.error(request, 'Erreurs durant l\'enregistrement des informations de votre profil') else: form = UserUpdateForm(initial={'user':request.user}) return render(request, 'profile.html', {'account': user, 'form':form})
Merci d'avance
Partager