2014-11-17 18 views
7

Ich habe den folgenden Code:django ModelMultipleChoiceField gesetzt Anfangswert

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

wie kann ich einen Anfangswert in dem Auswahlfeld gesetzt wie „Wählen Sie eine Kategorie“, so dass das Auswahlfeld, um eine Liste der Kategorien haben sollte der Anfangswert ist "Wählen Sie eine Kategorie"

Antwort

10

Sie können es aus Ihrer Sicht die "ursprüngliche" Einstellung übergeben. Zum Beispiel:

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

Der schwierige Teil ist, dass Sie das richtige Queryset haben müssen. Genau wie die Seed-Werte muss es von Category.objects.filter (...) sein - alles andere wird nicht funktionieren.

+0

Das ist die einzige Sache ist, die ich online finden konnte, die tatsächlich funktioniert. +1 – dspacejs

8

Entweder eingestellten Anfangs, wenn Sie Formularinstanz oder Set Feld initial in Form init

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

erstellen Wenn Sie nur den Text ändern möchten, wenn kein Feld ausgewählt Sie empty_label Eigenschaft einstellen. https://docs.djangoproject.com/en/1.10/ref/forms/fields/#django.forms.ModelChoiceField.empty_label

1

Wenn Sie ein QuerySet Objekt als Anfangswert übergeben und wenn widget=forms.CheckboxSelectMultiple, dann sind die Kontrollkästchen nicht aktiviert. Ich hatte das QuerySet Objekt in eine Liste zu konvertieren, und dann wurden die Kontrollkästchen aktiviert:

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