Фильтрация админки django inline - ограничение списка выбора

Данные моего встроенного администратора:

class TestInlineAdmin(admin.TabularInline):
    model = Test.questions.through
    extra = 0  

и тогда

class QuestionAdmin(admin.ModelAdmin):
    inlines = [TestInlineAdmin, ]

Test модель имеет поле question, которое является ManyToMany. И я обычно могу редактировать список вопросов непосредственно из модели Test. Но я хочу иметь возможность выбирать тесты из встроенной админки в QuestionAdmin (так, в обратном порядке). Это работает. Но мне нужно фильтровать объекты тестов в этом инлайне, чтобы список вариантов показывал только Test.objects.filter(applicable=False).

inline admin item

Я пытался использовать get_queryset, но это, кажется, не влияет на список выбора, он только фильтрует фактические ссылочные элементы в строке, но список выбора для нового элемента всегда показывает мне полный нефильтрованный queryset для модели Test.

Переопределение formfield_for_manytomany не работает в inline - оно вообще не выполняется. Возможно ли это как-то сделать с помощью formfield_overrides? Или, как мне кажется, единственным способом будет настройка inline формы?

Вы можете ограничить QuerySet от TestInlineAdmin с помощью:

class TestInlineAdmin(admin.TabularInline):
    model = Test.questions.through
    extra = 0
    
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == 'test':
            kwargs['queryset'] = Test.objects.filter(applicable=False)
        return super().formfield_for_foreignkey(db_field, request, **kwargs)
Вернуться на верх