Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why are read-only form fields in Django a bad idea?

I've been looking for a way to create a read-only form field and every article I've found on the subject comes with a statement that "this is a bad idea". Now for an individual form, I can understand that there are other ways to solve the problem, but using a read only form field in a modelformset seems like a completely natural idea.

Consider a teacher grade book application where the teacher would like to be able to enter all the students' (note the plural students) grades with a single SUBMIT. A modelformset could iterate over all the student-grades in such a way that the student name is read-only and the grade is the editable field. I like the power and convenience of the error checking and error reporting you get with a modelformset but leaving the student name editable in such a formset is crazy.

Since the expert django consensus is that read-only form fields are a bad idea, I was wondering what the standard django best practice is for the example student-grade example above?

like image 230
jamida Avatar asked May 25 '10 04:05

jamida


2 Answers

The reason you don't want to do this is because someone can change your disabled field to enabled and then submit the form. You would have to change the save function as to not insert the "disabled" data.

The standard way to do this is to not put the name in an input, but to display it as text

<form>     <div>         <label>Name</label>         <p>Johnny Five</p>     </div>     <div>         .... 

This is not possible in django.

I say if you really trust your userbase to not "mess" with things then go for it, but if its a public facing website with possible sensitive data then stay away.

like image 111
Galen Avatar answered Sep 20 '22 01:09

Galen


As far as I can see for your situation, this is the ideal answer:

https://stackoverflow.com/a/2242468/1004781

Ie, simply print the model variables in the template:

{{ form.instance.LastName }} 
like image 33
rix Avatar answered Sep 19 '22 01:09

rix