Voici la déclaration du champ dans un formulaire:
max_number = forms.ChoiceField(widget = forms.Select(),
choices = ([('1','1'), ('2','2'),('3','3'), ]), initial='3', required = True,)
Je souhaite que la valeur initiale soit 3
et cela ne semble pas fonctionner. J'ai joué avec le paramètre, les guillemets / pas de guillemets, etc ... mais aucun changement.
Quelqu'un pourrait-il me donner une réponse définitive si c'est possible? Et / ou l'ajustement nécessaire dans mon extrait de code?
J'utilise Django 1.0
django
django-models
django-forms
thebiglife
la source
la source
Réponses:
Essayez de définir la valeur initiale lorsque vous instanciez le formulaire:
la source
'3'
correspond à la première valeur du tuple ou la deuxième?Cela ne touche pas à la question immédiate à portée de main, mais ce Q / R apparaît pour les recherches liées à la tentative d'attribution de la valeur sélectionnée à a
ChoiceField
.Si vous avez déjà appelé
super().__init__
votre classe Form, vous devez mettre à jour leform.initial
dictionnaire, pas lafield.initial
propriété. Si vous étudiezform.initial
(par exempleprint self.initial
après l'appel àsuper().__init__
), il contiendra des valeurs pour tous les champs. Avoir une valeur deNone
dans ce dict remplacera lefield.initial
valeur.par exemple
la source
Vous pouvez également effectuer les opérations suivantes. dans votre classe de formulaire def:
Ensuite, lorsque vous appelez le formulaire dans votre vue, vous pouvez définir dynamiquement les choix initiaux et la liste de choix.
Remarque: les valeurs initiales doivent être une liste et les choix doivent être de 2 tuples, dans mon exemple ci-dessus, j'ai une liste de 2 tuples. J'espère que cela t'aides.
la source
initial
fait référence à la clé de l'élément à sélectionner, et non à son index. Il m'a fallu quelques essais pour résoudre ce problème!J'ai également rencontré ce problème et j'ai découvert que le problème était dans le navigateur. Lorsque vous actualisez, le navigateur remplit à nouveau le formulaire avec les mêmes valeurs qu'auparavant, en ignorant le champ coché. Si vous affichez la source, vous verrez que la valeur cochée est correcte. Ou placez votre curseur dans le champ URL de votre navigateur et appuyez sur Entrée. Cela rechargera le formulaire à partir de zéro.
la source
Les réponses de Tom et Burton fonctionnent finalement pour moi, mais j'ai eu un peu de mal à comprendre comment les appliquer à un fichier
ModelChoiceField
.Le seul truc pour cela est que les choix sont stockés sous forme de tuples de
(<model's ID>, <model's unicode repr>)
, donc si vous voulez définir la sélection initiale du modèle, vous passez l' ID du modèle comme valeur initiale, pas l'objet lui-même ou son nom ou autre chose. Ensuite, c'est aussi simple que:Alternativement, l'
initial
argument peut être ignoré à la place d'une ligne supplémentaire avec:la source
GET
demande et la définir à partir d'une vue.Dave - une chance pour trouver une solution au problème du navigateur? Existe-t-il un moyen de forcer un rafraîchissement?
En ce qui concerne le problème d'origine, essayez ce qui suit lors de l'initialisation du formulaire:
la source
Instances should always modify self.fields; they should not modify self.base_fields.
Pour être sûr, j'ai besoin de voir comment vous affichez le formulaire. La valeur initiale n'est utilisée que sous une forme non liée, si elle est liée et qu'une valeur pour ce champ n'est pas incluse, rien ne sera sélectionné.
la source
Essayez ceci, cela fonctionne pour moi, j'ai ajouté ceci dans models.py
la source
TypeError at /my/url/ __init__() got an unexpected keyword argument 'default' Request Method: GET Request URL: http://localhost:8000/my/url/ Django Version: 1.8.1 Exception Type: TypeError Exception Value: __init__() got an unexpected keyword argument 'default'