Dans un formulaire Django, comment faire pour qu'un champ soit en lecture seule (ou désactivé) ?
Lorsque le formulaire est utilisé pour créer une nouvelle entrée, tous les champs doivent être activés - mais lorsque l'enregistrement est en mode de mise à jour, certains champs doivent être en lecture seule.
Par exemple, lors de la création d'une nouvelle Item
tous les champs doivent être modifiables, mais lors de la mise à jour de l'enregistrement, existe-t-il un moyen de désactiver l'option sku
pour qu'il soit visible, mais ne puisse pas être modifié ?
class Item(models.Model):
sku = models.CharField(max_length=50)
description = models.CharField(max_length=200)
added_by = models.ForeignKey(User)
class ItemForm(ModelForm):
class Meta:
model = Item
exclude = ('added_by')
def new_item_view(request):
if request.method == 'POST':
form = ItemForm(request.POST)
# Validate and save
else:
form = ItemForm()
# Render the view
La classe Can ItemForm
être réutilisé ? Quels changements seraient nécessaires dans le ItemForm
o Item
classe modèle ? Devrais-je écrire une autre classe, " ItemUpdateForm
", pour la mise à jour de l'article ?
def update_item_view(request):
if request.method == 'POST':
form = ItemUpdateForm(request.POST)
# Validate and save
else:
form = ItemUpdateForm()
1 votes
Voir aussi la question sur le SO : Pourquoi les champs de formulaire en lecture seule dans Django sont-ils une mauvaise idée ? @ stackoverflow.com/questions/2902024 La réponse acceptée (par Daniel Naab) prend en charge les hacks POST malveillants.
0 votes
forms.fields.Field.disabled