Ich habe ein schreibgeschütztes Feld in einem Django-Formular, das ich manchmal bearbeiten möchte.
Ich möchte nur den richtigen Benutzer mit den richtigen Berechtigungen, um das Feld zu bearbeiten. In den meisten Fällen ist das Feld gesperrt, aber ein Administrator könnte dies bearbeiten.Wie werden optional schreibgeschützte Felder in Django-Formularen erstellt?
Mit der init Funktion kann ich das Feld schreibgeschützt oder nicht, aber nicht optional schreibgeschützt machen. Ich habe auch versucht, ein optionales Argument an StudentForm zu übergeben. init aber das wurde viel schwieriger, dass ich erwartet hatte.
Gibt es einen richtigen Weg, dies zu erreichen?
models.py
class Student():
# is already assigned, but needs to be unique
# only privelidged user should change.
student_id = models.CharField(max_length=20, primary_key=True)
last_name = models.CharField(max_length=30)
first_name = models.CharField(max_length=30)
# ... other fields ...
forms.py
class StudentForm(forms.ModelForm):
class Meta:
model = Student
fields = ('student_id', 'last_name', 'first_name',
# ... other fields ...
def __init__(self, *args, **kwargs):
super(StudentForm, self).__init__(*args, **kwargs)
instance = getattr(self, 'instance', None)
if instance:
self.fields['student_id'].widget.attrs['readonly'] = True
views.py
def new_student_view(request):
form = StudentForm()
# Test for user privelige, and disable
form.fields['student_id'].widget.attrs['readonly'] = False
c = {'form':form}
return render_to_response('app/edit_student.html', c, context_instance=RequestContext(request))