Login

Read-only Model Form Base Class

Author:
tgandor
Posted:
April 14, 2014
Language:
Python
Version:
1.4
Tags:
form readonly
Score:
1 (after 1 ratings)

The simplest way of displaying a "details" table about any model, is to show a ModelFrom with all fields readonly or (selects) disabled.

Also, the labels are preferably translatable, not just capitalized names of the column tables in your models. So the constructor translates the field labels as well.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
from django import forms

class ReadOnlyForm(forms.ModelForm):
    """Base class for making a form readonly."""
    def __init__(self, *args, **kwargs):
        from django.utils.translation import ugettext as _
        from django.forms.widgets import Select
        super(ReadOnlyForm, self).__init__(*args, **kwargs)
        for f in self.fields:
            self.fields[f].label = _(self.fields[f].label)
            if isinstance(self.fields[f].widget, Select):
                self.fields[f].widget.attrs['disabled'] = 'disabled'
            else:
                self.fields[f].widget.attrs['readonly'] = 'readonly'

More like this

  1. Read only form & model field by StanislavKraev 4 years, 1 month ago
  2. Readonly fields on Form/Modelform by Killarny 6 years, 6 months ago
  3. Selectively change fields, widgets or labels in forms created from models by danjak 8 years, 6 months ago
  4. Replace model select widget in admin with a readonly link to the related object by ekellner 7 years ago
  5. Improved model select field for generic relationships by kratorius 6 years, 1 month ago

Comments

nqryn (on August 28, 2014):

Thanks, this is very useful. However, the readonly attribute does not work for inputs with type file, so I think that for files, there should be a new Widget, which displays the file.

#

Please login first before commenting.