Comment puis-je désactiver un champ de modèle dans un formulaire Django
J'ai un modèle comme ceci:
class MyModel(models.Model):
REGULAR = 1
PREMIUM = 2
STATUS_CHOICES = ((REGULAR, "regular"), (PREMIUM, "premium"))
name = models.CharField(max_length=30)
status = models.IntegerField(choices = STATUS_CHOICES, default = REGULAR)
class MyForm(forms.ModelForm):
class Meta:
model = models.MyModel
Dans un point de vue, je initialiser un champ et d'essayer de rendre non modifiable:
myform = MyForm(initial = {'status': requested_status})
myform.fields['status'].editable = False
Mais l'utilisateur peut modifier ce champ.
Quelle est la vraie manière d'accomplir ce que je suis après?
source d'informationauteur jammon
Vous devez vous connecter pour publier un commentaire.
Étape 1: Désactiver l'interface widget
Utiliser le code HTML
readonly
attribut:http://www.w3schools.com/tags/att_input_readonly.asp
Ou
disabled
attribut:http://www.w3.org/TR/html401/interact/forms.html#adef-disabled
Vous pouvez injecter du code HTML arbitraire paires clé-valeur via le widget attrs propriété:
Étape 2: vérifiez que le champ est désactivé sur le backend
Remplacer votre propre méthode pour votre domaine de sorte que, indépendamment de la POST-entrée (quelqu'un peut simuler d'afficher, d'éditer le HTML brut, etc.) vous obtenez la valeur de champ qui existe déjà.
Avez-vous essayé d'utiliser les exclure de la fonction?
quelque chose comme cela
Référence Ici
Simplement personnaliser le widget exemple pour le champ de statut:
voir: Documentation De Django
De django 1.9:
Il y a un moyen très simple de le faire:
La
editable=False
fera le domaine désactivés pour l'édition.