Réglage de la valeur sélectionnée sur un Django formes.ChoiceField
Ici est le champ de la déclaration dans un formulaire:
max_number = forms.ChoiceField(widget = forms.Select(),
choices = ([('1','1'), ('2','2'),('3','3'), ]), initial='3', required = True,)
Je voudrais définir la valeur initiale à 3
et cela ne semble pas fonctionner. J'ai joué avec le param, des citations/pas de guillemets, etc... mais pas de changement.
Quelqu'un pourrait-il me donner une réponse définitive si elle est possible? Et/ou les tordre dans mon extrait de code?
Je suis en utilisant Django 1.0
- Je me demandais la même chose. "initiale" n'a pas de couture à travailler avec des choix dans le dernier coffre de la version ainsi.
Vous devez vous connecter pour publier un commentaire.
Essayer le réglage de la valeur initiale lorsque vous instanciez la forme:
'3'
correspondant à la première valeur du tuple ou le second?Ce n'est pas tactile sur la question immédiate à portée de main, mais ce Q/A vient pour les recherches liées à l'assigner la valeur d'une
ChoiceField
.Si vous avez déjà appelé
super().__init__
dans votre classe de Formulaire, vous devez mettre à jour lesform.initial
dictionnaire, pas lafield.initial
de la propriété. Si vous étudiezform.initial
(par exempleprint self.initial
après l'appel àsuper().__init__
), il contiendra les valeurs pour tous les champs. Ayant une valeur deNone
dans ce dict va se substituer à l'field.initial
valeur.par exemple
Vous pouvez également effectuer les opérations suivantes. dans votre formulaire de classe def:
puis lors de l'appel de la forme de votre point de vue, vous pouvez définir dynamiquement les deux choix de départ et la liste de choix.
Remarque: les valeurs initiales a la forme d'une liste et le choix de 2-tuples, dans mon exemple ci-dessus j'ai une liste de 2-tuples. Espérons que cette aide.
initial
se réfère à la clé de l'élément sélectionné, pas de son index. M'a fallu quelques essais pour faire ce travail!Je suis tombé sur ce problème, et compris que le problème est dans le navigateur. Lorsque vous actualisez le navigateur est de remplir à nouveau le formulaire avec les mêmes valeurs qu'avant, en ignorant les bagages champ. Si vous affichez la source, vous verrez que la valeur est correcte. Ou placez votre curseur dans le champ URL du navigateur et appuyez sur entrée. Qui sera re-charger le formulaire à partir de zéro.
Tom Burton et les réponses de travail pour moi, mais finalement j'ai eu un peu de mal à comprendre comment les appliquer à un
ModelChoiceField
.Le seul truc, c'est que les choix sont stockées comme des tuples de
(<model's ID>, <model's unicode repr>)
, donc si vous souhaitez définir le modèle initial de sélection, vous passez du modèle ID comme valeur initiale, et non pas l'objet lui-même ou en son nom ou quoi que ce soit d'autre. Puis c'est aussi simple que:Sinon le
initial
argument peut être ignoré en place d'une ligne supplémentaire avec:GET
demande et de définir à partir d'un point de vue.Dave - aucune chance de trouver une solution au problème de navigateur? Est-il un moyen de forcer un rafraîchissement?
Comme pour l'origine du problème, essayez les solutions suivantes lors de l'initialisation de la forme:
Instances should always modify self.fields; they should not modify self.base_fields.
Pour être sûr que j'ai besoin de voir comment vous vous en êtes rendu du formulaire. La valeur initiale est seulement utilisé dans un formulaire indépendant, si elle est liée et une valeur pour ce champ n'est pas inclus rien ne sera sélectionné.
Essayer ce qui marche pour moi, j'ai ajouté ceci dans models.py
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'