Вы можете использовать MultipleChoiceField с виджетом CheckboxSelectMultiple , чтобы создать что-то вроде этого:
class CustomWidgetForm(forms.Form):
SOME_CHOICES = (
(1, "Havana"),
(2, "New York"),
(3, "Changai"),
(4, "London"),
)
multiselect = forms.MultipleChoiceField(choices=SOME_CHOICES, widget=forms.CheckboxSelectMultiple())
Это отобразит поле множественного выбора следующим образом:

И тогда вы можете применить пользовательский шаблон к виджету CheckboxSelectMultiple
, чтобы обеспечить некоторые js и визуализировать виджеттак же, как вы хотите.
Другой подход заключается в использовании поля множественного выбора по умолчанию в сочетании с плагином Jquery, например JQuery.sumoselect
Упомянутый плагин имеет возможность сделатьполе выбора выглядит так:

Существует много возможностей, но вы наверняка должны будете задействовать JS в этом.