2014-11-17 136 views
7

我有以下代码:Django的ModelMultipleChoiceField设置的初始值

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

我怎么在选择框中设置初始值,如“选择类别”,以便选择框应该具有的类别与列表初始值为“选择一个类别”

回答

10

您可以从视图中将“初始”设置传递给它。例如:

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

棘手的部分是您必须拥有正确的查询集。就像种子值一样,它必须是Category.objects.filter(...) - 其他任何东西都不行。

+0

这是我能找到网上的实际工作的唯一的东西。 +1 – dspacejs

1

如果您传递一个QuerySet对象作为初始值,并且如果widget=forms.CheckboxSelectMultiple,则复选框不会被选中。我不得不把QuerySet对象转换到一个列表,然后将复选框被检查:

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