Comment puis-je supprimer "------" des choix rendus? J'utilise dans mon formulaire type:
widgets = {
"event_form": forms.CheckboxSelectMultiple(),
}
Dans le modèle, j'ai IntegerField avec des choix:
EVENT_FORM_CHOICES = (
(1, _(u"aaaa")),
(2, _(u"bbbb")),
(3, _(cccc")),
(4, _(u"dddd")),
(5, _(eeee"))
)
Les choix rendus contiennent --------- comme premier choix possible. Comment puis-je m'en débarrasser?
MODIFIER: Le seul moyen de travailler que j’ai découvert est (dans init méthode):
tmp_choices = self.fields["event_form"].choices
del tmp_choices[0]
self.fields["event_form"].choices = tmp_choices
mais ce n'est pas très élégant :)
Réponses:
1 pour la réponse № 1Django inclut le choix vide car le champ n’a pas de valeur par défaut.
Si vous définissez une valeur par défaut dans votre modèle, Django n'inclura pas le choix vide.
class MyModel(models.Model):
event_form = models.PositiveSmallIntegerField(choices=EVENT_FORM_CHOICES, default=1)
Si vous ne voulez pas définir de valeur par défaut dans votre modèle, vous pouvez alors déclarer explicitement le champ et les choix dans le formulaire de modèle, ou modifier les choix dans le formulaire de modèle. __init__
méthode.
3 pour la réponse № 2
Mettre à jour
un exemple similaire peut être utile:
country = ModelChoiceField(reference_class = Country, choices= country_choices,
required=True, empty_label=None, widget=forms.Select)
Si vous souhaitez plutôt une solution côté client:
<script>
$("#selectBox option[value="-----"]").remove();
</script>
0 pour la réponse № 3
J'ai rencontré un problème similaire, mais je l'ai corrigé de cette façon. Tout d'abord, téléchargez et installez https://pypi.python.org/pypi/django-multiselectfield. Si vous ne savez pas comment installer, regardez ici: Django-multiselectfield ne peut pas installer. Ensuite, dans models.py:
from multiselectfield import MultiSelectField
CHOICES_FOR_ITEM_WITH_CHOICES = (
("choice 1", "choice 1"),
("choice 2", "choice 2"),
("choice 3", "choice 3"),
)
class MyModel(models.Model):
item_with_choices = MultiSelectField(max_length=MAX_LENGTH, null=True, blank=True)
Dans admin.py:
from .forms import MyModelForm
class MyModelAdmin(admin.ModelAdmin):
form = MyModelForm
list_display = ("item_with_choices",)
list_filter = ("item_with_choices",)
search_fields = ("item_with_choices",)
admin.site.register(MyModel, MyModelAdmin)
Dans forms.py (vous pouvez nommer ce que vous voulez):
from .models import MyModel
class MyModelForm(ModelForm):
class Meta:
model = MyModel
fields = (
"item_with_choices",
)
def clean(self):
# do something that validates your data
return self.cleaned_data
Ceci construit la réponse ici: Django Model MultipleChoice