maccree
@maccree
freelance backend developer

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

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

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

Я попытался сделать что-то такое:
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)


но Screens можно добавить, а вот внутри Screens нет выбора, как это исправить?
  • Вопрос задан
  • 92 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы