2017-10-09 4 views
2

J'ai un formulaire où je définis les critères de sélection pour le rapport. L'un des 'bâtiments' du menu déroulant qui est automatiquement rempli à partir du modèle ne devrait pas être obligatoire et avoir la valeur par défaut comme vide. Je ne peux pas atteindre la partie vide.La valeur initiale dans le menu déroulant django n'est pas vide?

Je veux premier champ dans mon menu déroulant

dans ma forme

building = forms.IntegerField(
widget=forms.Select(
    choices=Building.objects.all().values_list('id', 'name') 
    ) , required=False 
) 

dans le fichier de vue quand j'initialiser le code

form = PaymentRangeForm(initial = {'building': 0 }) 

J'utilise des formes croustillantes dans mon modèle mais je ne Je ne pense pas que cela fasse une différence. Je ne reçois aucune erreur mais la valeur par défaut n'est pas vide, elle a une valeur du premier enregistrement du modèle.

Qu'est-ce qui me manque?

+0

-vous chargez la forme croustillante dans votre modèle? –

+0

oui je fais. Je viens de mettre à jour dans mon message original. –

+0

fournir votre modèle s'il vous plaît –

Répondre

0

Ok La solution était simple. Dans mon fichier de j'ai ajouté

from django.db.models.fields import BLANK_CHOICE_DASH 

et mis à jour le formulaire

class PaymentRangeForm(forms.Form): 

    start_date = forms.DateField(widget=forms.TextInput(attrs={'type': 'date'})) 
    end_date = forms.DateField(widget=forms.TextInput(attrs={'type': 'date'})) 
    building = forms.ChoiceField(choices=BLANK_CHOICE_DASH + list(Building.objects.values_list('id', 'name')), required=False) 
+0

vous pourriez plus facilement faire '... forms.ChoiceField (choices = [('', '-------')] + list (Building.ob ....'. – Thismatters

-1

Selon Django, peut-être vous pouvez l'essayer sans .Toutes() comme ci-dessous

choix = Building.objects.values_list ('id', 'nom')

+0

Non, cela ne fait aucune différence. Même résultat dans les deux cas. –

0

charge crispy_forms_tags haut de le gabarit.

{% load crispy_forms_tags %} 

<form method="POST" class="form" action="" method="get"> 
       {% csrf_token %} 
       {{ form|crispy}} 
       <br> 
       <button type="submit" class="btn btn-primary btn-primary">Search</button> 
</form> 
+0

Merci mais non actuellement ils sont déjà là dans mes inclusions. Si elles ne sont pas là tag croustillant dans ma forme donnerait une erreur. –