Lou*_*ost 17 django django-forms multiplechoicefield
我有以下代码:
category = forms.ModelMultipleChoiceField(
label="Category",
queryset=Category.objects.order_by('name'),
widget=forms.Select(
attrs={
'placeholder': 'Product Category', 'class': 'form-control'}),
required=True
)
Run Code Online (Sandbox Code Playgroud)
如何在选择框中设置初始值,如"选择一个类别",以便选择框应该有一个类别列表,其初始值为"选择一个类别"
bet*_*hmi 13
您可以从视图中将"初始"设置传递给它.例如:
form = FormUsingCategory(initial={'category':querysetofinitialvalues})
Run Code Online (Sandbox Code Playgroud)
棘手的部分是你必须拥有正确的查询集.就像种子值一样,它必须是Category.objects.filter(...) - 其他任何东西都不行.
use*_*706 12
如果您将QuerySet对象作为初始值传递并且如果widget=forms.CheckboxSelectMultiple,则不会选中复选框。我必须将QuerySet对象转换为列表,然后选中复选框:
YourForm(
initial={
"multi_field": [
cat for cat in Category.objects.all().values_list("id", flat=True)
]
}
)
Run Code Online (Sandbox Code Playgroud)
Tri*_*Nhu 11
在创建表单实例时设置初始值或在表单init中设置字段initial
def __init__(self, *args, **kwargs):
super(YourForm, self).__init__(*args, **kwargs)
self.fields["category"].initial = (
Category.objects.all().values_list(
'id', flat=True
)
)
Run Code Online (Sandbox Code Playgroud)
如果您只想在未选择任何字段时更改文本,则可以设置empty_label属性.https://docs.djangoproject.com/en/1.10/ref/forms/fields/#django.forms.ModelChoiceField.empty_label