2017-10-11 2 views
0

Ich habe ein Formular mit mehreren Feldern, die ich dem Benutzer zeigen möchte, aber verhindern, dass sie bearbeiten (sollte kein Bearbeitungsfeld sein).Deaktivieren von Feldern aus Bearbeiten in Django

Meine Form-Klasse sieht so aus und ich verwende die Felder Meta, um sie automatisch zu definieren. Ich möchte verhindern, dass Nutzer ihren Benutzernamen und ihre E-Mail-Adresse nach der Registrierung ändern.

class UserEditForm(forms.ModelForm): 
    class Meta: 
     model = User 
     fields = ('username', 'first_name', 'last_name', 'email', 'password') 

Die Frage In a Django form, how do I make a field readonly (or disabled) so that it cannot be edited? bietet keine Antwort auf das, was, wenn die Felder tun automatisch mithilfe von Meta definiert sind.

Ich habe

versucht
disabled = ('username', 'email',) 

Und ein paar andere Optionen, aber nichts scheint zu funktionieren. Ich möchte verhindern, dass jemand auch das Formular ändert und es einreicht (und die Daten werden geändert), da die vorherige Frage vorgeschlagen werden kann.

[Bearbeiten]: Mit Django 1.11

+0

Welche Version von Django verwenden Sie? Bearbeiten: Wenn Sie vor 1.9 verwenden, sollte die Antwort, die Sie verknüpft haben, gut funktionieren. – OptimusCrime

+0

Ich benutze 1,11 neuesten – user8734958

+0

hast du [Readonly Felder auf Formular/Modelform] (https://djangosnippets.org/snippets/1340/) Snippet? –

Antwort

2

Sie können festlegen, die disabled Eigenschaft auf die Felder, die Sie nach dem Formular müssen als initialisiert:

class UserEditForm(forms.ModelForm): 
    class Meta: 
     model = User 
     fields = ('username', 'first_name', 'last_name', 'email', 'password') 

    def __init__(self, *args, **kwargs): 
     super(UserEditForm, self).__init__(*args, **kwargs) 
     self.fields['username'].disabled = True 
     self.fields['email'].disabled = True 
+0

Ja, das dachte ich auch. Die 'disabled'-Variable ist ein boolesches 'Field'-Argument, keine Listendefinition wie' fields'. – OptimusCrime

+0

Genau das, was ich gesucht habe. Danke, sehr hilfreich. Felder befinden sich in einem Bearbeitungsbereich, sind jedoch deaktiviert. Habe nicht getestet, ob Hacking verhindert wird, aber aus den Django-Dokumenten sieht es so aus, als würden sie ignoriert werden. – user8734958

Verwandte Themen