Как создать двойной инлайн с polymorphic?

возникла задача создать двойной инлайн в админке, чтобы первый уровень был обычным, а второй с выбором "типа блока"

Допустим, есть какая-то модель Practicum, в которой создаются inline-ом, модели Screens, они имеют какие-то поля и возможность выбрать из ряда моделей, как это делается в polymorphic: пример_инлайна

Я попытался сделать что-то такое:

class BlockInline(StackedPolymorphicInline):

    class ScreenTextBlockLeftInline(StackedPolymorphicInline.Child):
        model = ScreenTextBlock_left

    class ScreenImageBlockLeftInline(StackedPolymorphicInline.Child):
        model = ScreenImageBlock_left

# ... остальные блоки

    model = Blocks
    child_inlines = (
        ScreenTextBlockLeftInline,
# ... остальные блоки

    )
    polymorphic_on = 'block_type'


class ScreenInline(PolymorphicInlineSupportMixin, admin.StackedInline):
    model = Screens
    inlines = [BlockInline]
    fields = ['literature', 'leterature_approvals_and_decodings']
    extra = 0


class PracticumAdmin(PolymorphicInlineSupportMixin, admin.ModelAdmin):
    inlines = [ScreenInline]
    exclude = [
        'image_desktop_810px',
        'image_desktop_1620px',
        'image_mobile_400px',
        'image_mobile_800px'
    ]
    search_fields = ['title', 'description', 'pacient_description']

admin.site.register(Practicum, PracticumAdmin)
Вернуться на верх