2017-08-29 4 views
0

Ich versuche, die doppelte E-Mail zu überprüfen, während ich als ein Benutzer angemeldet bin und mein eigenes Profil bearbeiten.Überprüfen doppelte E-Mail beim Bearbeiten von Benutzerprofil in Django

Aber wenn die eingegebene E-Mail die E-Mail des aktuell angemeldeten Benutzers ist und ich meine aktuelle E-Mail nicht aktualisieren möchte, erhalte ich auch eine doppelte E-Mail-Fehlermeldung.

Konten/forms.py

class UserProfileForm(forms.ModelForm): 
    class Meta: 
     model = models.Profile 
     fields = ("organisation", "phone_number") 

    first_name = forms.CharField(max_length=30) 
    last_name = forms.CharField(max_length=30) 
    phone_number = PhoneNumberField(label=_("Phone (Please state your country code eg. +44)")) 
    organisation = forms.CharField(max_length=30) 
    email = forms.EmailField() 


    def __init__(self, *args, **kwargs): 
     super(UserProfileForm, self).__init__(*args, **kwargs) 
     self.initial['first_name'] = self.instance.user.first_name 
     self.initial['last_name'] = self.instance.user.last_name 
     self.initial['email'] = self.instance.user.email 

    helper = FormHelper() 
    helper.layout = Layout(
     Div(
      Field("first_name", wrapper_class="col-sm-6"), 
      Field("last_name", wrapper_class="col-sm-6"), 
      css_class = "row" 
     ), 
     Div(
      Field("organisation", wrapper_class="col-sm-6"), 
      Field("email", wrapper_class="col-sm-6"), 
      css_class = "row" 
     ), 
     Div(
      Field("phone_number", wrapper_class="col-sm-6"), 
      css_class = "row" 
     ), 
    ) 

    def clean_email(self): 
     email = self.cleaned_data.get('email') 
     if email and User.objects.filter(email=email).exists(): 
      raise forms.ValidationError(u'Please use a different email address.') 
      return email 

    def save(self, commit=True, *args, **kwargs): 
     self.instance.user.first_name = self.cleaned_data['first_name'] 
     self.instance.user.last_name = self.cleaned_data['last_name'] 
     self.instance.user.email = self.cleaned_data['email'] 
     self.instance.user.save() 
     return super(UserProfileForm, self).save(commit, *args, **kwargs) 

Wie kann ich überprüfen, ob die eingegebene E-Mail eine neue E-Mail ist, und wenn es neue E-Mail ist dann überprüfen Sie doppelte Funktion andere E-Mail-Feld ignorieren und in anderen Bereiche aktualisieren.

Jede Hilfe/Vorschlag wird sehr geschätzt. Danke im Voraus.

+0

Hallo sollte hinzufügen Sie sehen sich diesen Beitrag an, dieser kann Ihnen helfen [prüfen, ob eine E-Mail existiert oder nicht] (https://stackoverflow.com/a/39602446/7261317) – Robert

Antwort

3

Verwenden Sie den exclude Filter nach Ihrer filter, um den aktuell angemeldeten Benutzer von Ihrer Abfrage auszuschließen. Dokumentation here:

User.objects.filter(email=email).exclude(id=self.user.id) 

Es ist jedoch bedeutet, dass Ihre Ansicht den aktuellen Benutzer das Formular übergeben müssen, so können Sie das als init Argument an die Form der Initialisierung (so dass self.user = user) kann

+0

Ich bearbeite das Benutzerprofil in einem Popup-Formular und das Formular hat aktuelle Benutzer schon. 'form = POPUP_FORMS [Schlüssel] ['Formular'] (instance = instance, initial = {" user ": request.user})' –

+0

Sortiert. Ich musste 'self.user = self.instance.user' unter __init__function verwenden. Vielen Dank für deine Hilfe. –

Verwandte Themen