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 :
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")
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
 
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})
ce que django me renvoi : Un utilisateur avec ce nom existe déjà.

Merci d'avance