2010-10-14 41 views
5

Si le champ d'un modèle est une clé de choix ou étrangère, le widget sur la page est une entrée ou des radios sélectionnées si vous spécifiez cela. Django place "---------" dans le premier élément comme une valeur non sélectionnée. Comment puis-je le remplacer ou même le supprimer? Je me souviens avoir lu la façon de le faire mais je n'arrive plus à le trouver.Comment supprimer l'élément non sélectionné dans une entrée select et radio dans Django

Répondre

6

Voir: http://docs.djangoproject.com/en/dev/topics/forms/modelforms/

Si le champ modèle est fixé choix, alors le widget du champ de formulaire sera set pour sélectionner, avec des choix à venir de choix du champ de modèle. Les choix incluent normalement le choix vide sélectionné par par défaut. Si le champ est requis, force l'utilisateur à effectuer une sélection . Le blanc ne sera pas être inclus si le champ du modèle a vide = Faux et une valeur par défaut explicite (la valeur par défaut sera initialement sélectionné à la place).

3

Si c'est un ModelForm, juste mis default=None dans votre modèle, comme ceci:

choose = models.CharField(max_length=3, choices=choose_dict, default=None) 
+1

cela ne fonctionne pas – Tony

+0

-1: 'default' est utilisé au niveau de la base de données, pas au niveau du formulaire. Cela signifie simplement que si la valeur n'est pas définie lors de la création de l'objet modèle, la valeur sera définie sur None. Avis dangereux – Patrick

+0

@Patrick non vrai (au moins depuis Django 1.4). Voir http://stackoverflow.com/a/11721969/898423 –

6

De l'Django forms doc:

Par défaut le widget <select> utilisé par ModelChoiceField aura un un choix vide en haut de la liste. Vous pouvez modifier le texte de cette étiquette (ce qui est « --------- » par défaut) avec l'attribut empty_label, ou vous pouvez désactiver l'étiquette vide entièrement en définissant empty_label=None:

field2 = forms.ModelChoiceField(queryset=..., empty_label=None)

Si vous devez le faire sur un ModelForm, j'ai eu une réponse here.

+0

Arrgghhh, la solution dans le lien semble trop compliquée. Je suppose que dans ce cas, mieux vaut recourir à la forme ordinaire. –