2016-12-29 2 views
1

Ich habe benutzerdefinierte Benutzer in Django, so in Benutzererstellungsformular in Admin wir haben password Feld, und es wird während der Erstellung gespeichert, aber wenn ich bestehenden Benutzer ändern geändert und ich werde das Passwortfeld nicht eingeben/ändern, aber es wird in der Datenbank angezeigt. Unten ist mein CodeUpdate-Passwort nur, wenn es beim Aktualisieren von Benutzer in Django Admin

class ChangeClientEmployeeMasterForm(forms.ModelForm): 
def __init__(self, *args, **kwargs): 
    super(ChangeClientEmployeeMasterForm, self).__init__(*args, **kwargs) 
    self.fields['groups'].label='Roles'   
    if 'instance' in kwargs and hasattr(kwargs['instance'], 'client_employee_id'): 
     self.client_employee_id = kwargs['instance'].client_employee_id 
def clean(self): 
    if self.cleaned_data['client_employee_type'] =='imast': 
     self.cleaned_data['is_superuser'] = True 
    else : 
     self.cleaned_data['is_superuser'] = False 
    return self.cleaned_data 
def save(self, commit=True): 
    user = super(ChangeClientEmployeeMasterForm, self).save(commit=False) 
    password = self.cleaned_data["password"] 
    if password: 
     user.set_password(password) 
    if commit: 
     user.save() 
    return user 
class Meta: 
    model = ClientEmployeeMaster 
+0

Wenn Sie versuchen, vorhandenen Benutzer zu ändern, nehme ich an, dass das 'Passwort'-Feld mit vorhandenen Passwort gefüllt wird und so Ihre Bedingung in der Speichermethode ausgeführt wird. Ich würde vorschlagen, das Passwort leer zu machen, wenn das Formular während der Aktualisierung geladen wird. – nik

+0

ja .. Passwort-Feld ist leer, wenn ich das Formular lade, aber immer noch ist es gleich – Sanjay

+0

Haben Sie nicht Id für jeden Benutzer (die zum Zeitpunkt der Benutzererstellung erstellt werden) ?. Wenn ja, dann, wann immer Sie Daten zum Aktualisieren holen, dann prüfen Sie, ob eine bestimmte Anfrage mit der existierenden ID kommt und aktualisieren Sie dann einfach die anderen Details und nicht das Passwort. –

Antwort

0

Sie versuchen diese Option, habe ich dies in Django Admin 1.10 versucht. Das sollte funktionieren.

def clean(self): 
    password = self.cleaned_data['password'] 
    if not password and password =='': 
     del self.cleaned_data['password'] 
    #Add your extra code/statement here, if you need. 
    return self.cleaned_data 
Verwandte Themen