Dans un Django formulaire, comment faire un champ en lecture seule (ou désactivé), de sorte qu'il ne peut pas être modifié?

Dans un Django formulaire, comment faire 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 de 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 modifiable, mais alors que la mise à jour de l'enregistrement, est-il un moyen de désactiver la sku champ de sorte qu'il est visible, mais ne peut 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

Peut classe ItemForm - il être réutilisé? Quels changements seraient nécessaires dans le ItemForm ou Item modèle de classe? J'ai besoin d'é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()
  • Voir aussi la question: Pourquoi sont en lecture seule pour les champs de formulaire dans Django une mauvaise idée? @ stackoverflow.com/questions/2902024 , a Accepté de répondre (par Daniel Naab) prend soin de malveillant POST hacks.
InformationsquelleAutor e70 | 2008-11-27