Django:ModelMultipleChoiceField不选择初始选择
在Django中,ModelMultipleChoiceField是一个用于表示多个选择的字段,它可以让用户从一个模型中选择多个选项。如果你想要设置初始选择的选项,可以使用initial
参数。
例如,假设你有一个Category
模型,它有一个name
字段,你想要在ModelMultipleChoiceField
中选择初始值为"Category 1"
和"Category 2"
,你可以这样设置:
from django import forms
from .models import Category
class MyForm(forms.Form):
categories = forms.ModelMultipleChoiceField(
queryset=Category.objects.all(),
widget=forms.CheckboxSelectMultiple,
initial=lambda: Category.objects.filter(name__in=['Category 1', 'Category 2'])
)
在这个例子中,我们使用了一个lambda函数来动态地获取初始值。这个函数会在表单实例化时执行,并返回一个Category
查询集,其中包含名称为"Category 1"
和"Category 2"
的所有类别。
如果你想要设置默认选中的选项,可以使用choices
参数。例如,假设你有一个Category
模型,它有一个name
字段,你想要在ModelMultipleChoiceField
中默认选中"Category 1"
和"Category 2"
,你可以这样设置:
from django import forms
from .models import Category
class MyForm(forms.Form):
categories = forms.ModelMultipleChoiceField(
queryset=Category.objects.all(),
widget=forms.CheckboxSelectMultiple,
initial=lambda: Category.objects.filter(name__in=['Category 1', 'Category 2']),
choices=[(c.id, c.name) for c in Category.objects.filter(name__in=['Category 1', 'Category 2'])]
)
在这个例子中,我们使用了choices
参数来设置默认选中的选项。这个参数是一个元组列表,每个元组包含两个值:第一个值是选项的值,第二个值是选项的显示名称。在这个例子中,我们使用了一个列表推导式来从Category
查询集中创建元组列表。
请注意,使用choices
参数会覆盖queryset
参数中指定的查询集,因此在使用choices
参数时要小心。
领取专属 10元无门槛券
手把手带您无忧上云