web-dev-qa-db-fra.com

Champ en lecture seule dans le formulaire Django

Comment définir un champ en lecture seule sous une forme Django? Je sais comment désactiver un champ mais ce n'est pas ce que je recherche. Toute aide serait appréciée.

15
Foobar

Vous pouvez utiliser le paramètre facultatif attrs lors de la définition du Field. En être témoin:

somefield = forms.CharField(
    widget=forms.TextInput(attrs={'readonly':'readonly'})
)
21
nael

Dans Django 1.9+:

somefield = forms.CharField(disabled=True)
10
surfer190

Dans Django 1.9 dans un attribut Field.disabled disponible: https://docs.djangoproject.com/en/1.9/ref/forms/champs/# désactivé

L'argument booléen désactivé, lorsqu'il est défini sur True, désactive un champ de formulaire à l'aide de l'attribut HTML désactivé afin qu'il ne soit pas modifiable par les utilisateurs. Même si un utilisateur altère la valeur du champ soumise au serveur, elle sera ignorée en faveur de la valeur des données initiales du formulaire.

sinon

utiliser l'attribut widget en lecture seule

class PatientForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
       super(PatientForm, self).__init__(*args, **kwargs)
       self.fields['field'].widget.attrs['readonly'] = True

    class Meta:
        model = Patient
10
mtt2p