django ModelMultipleChoiceField set initial values

雨燕双飞 提交于 2019-12-04 22:48:06

If you pass a QuerySet object as an initial value and if widget=forms.CheckboxSelectMultiple, then the check boxes are not checked. I had to convert the QuerySet object to a list, and then the check boxes were checked:

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

You can pass it the "initial" setting from your view. For example:

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

The tricky part is that you must have the right queryset. Just like the seed values, it must be of Category.objects.filter(...) - anything else won't work.

Either set initial when you create form instance or set field 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
        )
    )

If you just want to change the text when no field selected you can set empty_label property. https://docs.djangoproject.com/en/1.10/ref/forms/fields/#django.forms.ModelChoiceField.empty_label

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!