/ / Django - CheckboxSelectMultiple sans le choix “------” - django, django-widget, django-forms

Django - CheckboxSelectMultiple sans le choix “------” - django, django-widget, django-forms

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 № 1

Django 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