Wednesday, January 29, 2014

Django - Use the Django admin app's FilteredSelectMultiple widget in form

To use the FilteredSelectMultiple widget of the Django admin app you have to do several things:

0. Include FilteredSelectMultiple widget:

from django.contrib.admin.widgets import FilteredSelectMultiple

1. Define the form, for example:

class MyForm(forms.Form):
first_name = forms.CharField(max_length=100)
groups = forms.ModelMultipleChoiceField(\
widget=FilteredSelectMultiple("Groups", is_stacked=False),\

class Media:
css = {'all': ('/static/admin/css/widgets.css',),}
js = ('/admin/jsi18n',)


* /static/ is my STATIC_URL setting and I also copy the static admin folder from Django source.
* You also need to define the url pattern for jsi18n path in
(r'^admin/jsi18n/$', 'django.views.i18n.javascript_catalog'),

2. Include necessary css and js in the template:

<script type="text/javascript" src="/static/admin/js/jquery.min.js"></script>
<script type="text/javascript" src="/static/admin/js/jquery.init.js"></script>
{{ }}

Notes: myform is the variable returned by the view

The multiple select form field will be rendered as following: