Как использовать форму с полями автозаполнения в действии обновления администратора django

Я использую пользовательскую форму в панели администратора с двумя полями автозаполнения среди других.

Моя проблема заключается в том, что я не знаю, как использовать форму в действии обновления, чтобы сохраненные данные отображались с функцией автозаполнения.

В моей реализации в действии обновления значения появляются без функции автозаполнения.

Как я могу это исправить?

моя форма

class ModelSeoMetadatumForm(forms.ModelForm):
    name = ModelChoiceField(
        required=False, 
        queryset=MetaTag.objects.exclude(name__isnull=True).values_list('name', flat=True).distinct(), 
        widget=autocomplete.ModelSelect2(url='seo:name-autocomplete')
    )

    property = ModelChoiceField(
        required=False, 
        queryset=MetaTag.objects.exclude(property__isnull=True).values_list('property', flat=True).distinct(), 
        widget=autocomplete.ModelSelect2(url='seo:property-autocomplete')
    )

    class Meta:
        model = ModelSeoMetadatum
        fields = ('name', 'content', 'property', 'content_type', 'object_id')

мой админ

@admin.register(ModelSeoMetadatum)
class ModelSeoMetadatumAdmin(admin.ModelAdmin):
    add_form  = ModelSeoMetadatumForm
    list_display = ('id', 'name', 'content', 'property', 'content_object')
    fields = ('name', 'content', 'property', 'content_type', 'object_id')


    def get_form(self, request, obj=None, **kwargs):
        defaults = {}
        if obj is None:
            defaults['form'] = self.add_form
        defaults.update(kwargs)
        return super().get_form(request, obj, **defaults)

person gtopal    schedule 12.03.2021    source источник


Ответы (1)


Вы должны перезаписать виджет и указать ему сайт администратора в качестве параметра.

класс администратора:

class MyAdmin(admin.ModelAdmin):
    form = MyForm

определение формы:

class MyForm(forms.ModelForm):
    class Meta:
        widgets = {
            'some_lookup_field': AutocompleteSelect(
                MyModel._meta.get_field('some_lookup_field').remote_field,
                admin.site,
                attrs={'style': 'width: 20em'},
            ),
        }

Обратите внимание, что вам необходимо иметь хотя бы один search_filter в административном определении вашего поля поиска.

Посмотрите здесь улучшенную версию, которая при необходимости расширяется ссылка

person Jan Staal    schedule 10.04.2021