2014-11-17 18 views
7

ho il seguente codice:django ModelMultipleChoiceField impostare valori iniziali

category = forms.ModelMultipleChoiceField(
    label="Category", 
    queryset=Category.objects.order_by('name'), 
    widget=forms.Select(
     attrs={ 
      'placeholder': 'Product Category', 'class': 'form-control'}), 
    required=True 
) 

come faccio a impostare un valore iniziale nella casella di selezione come "Scegli una categoria" in modo che la casella di selezione dovrebbe avere un elenco di categorie con il valore iniziale è "Scegli una categoria"

risposta

10

È possibile passare l'impostazione "iniziale" dalla visualizzazione. Ad esempio:

form = FormUsingCategory(initial={'category':querysetofinitialvalues}) 

La parte difficile è che è necessario disporre del queryset giusto. Proprio come i valori seme, deve essere di Category.objects.filter (...) - qualsiasi altra cosa non funzionerà.

+0

questa è l'unica cosa che sono riuscito a trovare on-line che funziona realmente. +1 – dspacejs

8

In entrambi i set iniziale quando si crea un'istanza forma o impostare iniziale campo in forma init

def __init__(self, *args, **kwargs): 
    super(YourForm, self).__init__(*args, **kwargs) 
    self.fields["category"].initial = (
     Category.objects.all().values_list(
      'id', flat=True 
     ) 
    ) 

Se si vuole solo modificare il testo quando nessun campo selezionato è possibile impostare la proprietà empty_label. https://docs.djangoproject.com/en/1.10/ref/forms/fields/#django.forms.ModelChoiceField.empty_label

1

Se si passa un oggetto come valore iniziale e se widget=forms.CheckboxSelectMultiple, le caselle di controllo non vengono selezionate. Ho dovuto convertire l'oggetto QuerySet a un elenco, e quindi le caselle di controllo sono stati controllati:

YourForm(initial={'multi_field': 
    [cat for cat in Category.objects.all().values_list('id', flat=True)] 
    }) 
Problemi correlati