About Multiple Choice Fields with Django Admin Widget

Use FilteredSelectMultiple widget with the forms.MultipleChoiceField in the form to get the same kind of widget you get with filter_horizontal attribute for many-to-many fields. For example:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# configuration/admin.py
from django import forms
from django.contrib import admin
from django.contrib.admin.widgets import FilteredSelectMultiple
from .models import Configuration

class ConfigurationForm(forms.ModelForm):
    settings = forms.MultipleChoiceField(
        label="Settings",
        choices=Configuration.SETTING_CHOICES,
        required=False,
        widget=FilteredSelectMultiple(
            verbose_name="Settings",
            is_stacked=False,
        ),
    )
    class Meta:
        model = Configuration
        fields = "__all__"

@admin.register(Configuration)
class ConfigurationAdmin(admin.ModelAdmin):
    form = ConfigurationForm
    list_display = ["__str__"]
    fields = ["settings"]

Tips and Tricks Development Django 5.x Django 4.2 Django 3.2