Django: AJAX ManyToManyField em admin

Eu quero exibirManyToManyFields em admin assim comofilter_horizontal , mas preenche as opções à medida que o usuário digita no campo de filtro. Existem muitas opções e carregá-las todas de uma vez leva muito tempo.

eu encontreicampos filtrados por django-ajax mas me parece um exagero, pois exige alterações nas classes de modelo, quando tudo o que quero fazer é substituir todos os campos de seleção múltipla de um formulário.

Escrevendo um campo de widget personalizado que herda deadmin.widgets.FilteredSelectMultiple parece ser o caminho certo. Então, eu estou tentando rolar meu próprio widget:

class MultiSelectWidget(FilteredSelectMultiple):
    class Media:
        # here should be some js to load options dynamically
        js = (
            "some_js_to_load_ajax_options.js",
        )

    def render_options(self, choices, selected_choices):
        # this initializes the multiple select without any options
        choices = [c for c in self.choices if str(c[0]) in selected_choices]
        self.choices = choices
        return super(MultiSelectWidget, 
                     self).render_options([], selected_choices)

class MyAdminForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(MyAdminForm, self).__init__(*args, **kwargs)
        self.fields['m2m_field'].widget = MultiSelectWidget('m2m_field', is_stacked=False)
    class Meta:
        model = MyModel

class MyAdmin(admin.ModelAdmin):
    form = MyAdminForm

que processa corretamente.

Mas não sei como implementar issosome_js_to_load_ajax_options.js parte ajax. Devo escrever meu próprio trecho de jQuery ou modificarSelectFilter2 que vem comadmin/media/js? Alguém já esteve lá antes?

editar: Embora não esteja relacionado ao cerne da questão, como eu só quero substituir o widget do campo, a maneira mais curta é usarformfield_overrides:

class MultiSelectWidget(FilteredSelectMultiple):
    # as above

class MyAdmin(admin.ModelAdmin):
    formfield_overrides = {
        models.ManyToManyField: {'widget': MultiSelectWidget},
    }

questionAnswers(3)

yourAnswerToTheQuestion