Трясогузка | ChoiceField не отображается

Я столкнулся с каким-то непонятным поведением при работе с «StructBlock» и «ChoiceBlock». По некоторым причинам ChoiceBlock не отображается в меню администратора, если он разработан с помощью нотации классов.

Таким образом, в административном меню не отображается блок выбора. Только текстовый блок.

class CodeBlock(blocks.StructBlock):
    code = blocks.TextBlock(required=True)
    type = blocks.ChoiceBlock(choices=[
        ('markup', 'markup'), ('css', 'css')
    ], required=True),

    class Meta:
        template = 'home/blocks/code.html'

class HomePageIndex(Page):
    body = StreamField([('code', CodeBlock())])

    content_panels = Page.content_panels + [
        StreamFieldPanel('body'),
    ]

Следующее решение, на мой взгляд, в значительной степени равнозначно, но работает хорошо. Я не понимаю, почему ... Из-за того, что мне нужно поле Struct-Field чаще, я предпочитаю обозначение класса.

class HomePageIndex(Page):
    body = StreamField([
        ('code', blocks.StructBlock([
            ('code', blocks.TextBlock(required=True)),
            ('type', blocks.ChoiceBlock(choices=[
                ('markup', 'markup'), ('css', 'css')
        ], template='home/blocks/code.html'))
])

content_panels = Page.content_panels + [
    StreamFieldPanel('body'),

Не поймите меня неправильно, я мог бы заставить это работать (используя плохой способ). Интересно, почему это происходит.

Ты заранее

У вас есть конечная запятая в конце определения type в классе CodeBlock, что означает, что type сохраняется как кортеж, а не как ChoiceBlock. Вот почему он не будет отображаться - потому что трясогузка не распознает его как поле.

solarissmoke 14.04.2018 10:40

Ty. Это решает мою проблему. Tyvm

r4r3devAut 14.04.2018 11:11

Можно ли превратить это в настоящий ответ и принять?

allcaps 24.04.2018 23:11

Как уже было сказано, работает хорошо.

r4r3devAut 06.05.2018 12:26
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
861
0

Другие вопросы по теме