Dans un formulaire Django, comment puis-je rendre un champ 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'un nouveau Item
modèle, tous les champs doivent être modifiables, mais lors de la mise à jour de l'enregistrement, existe-t-il un moyen de désactiver le sku
champ 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 peut-elle ItemForm
être réutilisée? Quels changements seraient nécessaires dans la classe ItemForm
ou le Item
modèle? Aurais-je besoin d'écrire une autre classe, " ItemUpdateForm
", pour mettre à jour l'élément?
def update_item_view(request):
if request.method == 'POST':
form = ItemUpdateForm(request.POST)
# Validate and save
else:
form = ItemUpdateForm()