Фильтрация админки 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).
Я пытался использовать 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)