У меня есть собственный плагин MultiColumnResponsive, который получает количество столбцов в качестве параметра и принимает плагин ColumnResponsive только в качестве дочернего.Я хочу создать плагины ColumnResponsive, вложенные как дочерние по умолчанию, но я не могу это сделать.
Вот мой текущий код:
cms_plugins.py
class MultiColumnResponsivePlugin(CMSPluginBase):
name = "Multi Column Responsive"
module = _("Containers")
model = MultiColumn
render_template = "plugin/multi-column-responsive/multi-column-responsive.html"
allow_children = True
child_classes = ["ColumnResponsivePlugin"]
def render(self, context, instance, placeholder):
context = super(MultiColumnResponsivePlugin, self).render(context, instance, placeholder)
return context
class ColumnResponsivePlugin(CMSPluginBase):
name = "Column Responsive"
module = _("Containers")
render_template = "plugin/column-responsive/column-responsive.html"
allow_children = True
parent_classes = ["MultiColumnResponsivePlugin"]
def render(self, context, instance, placeholder):
context = super(ColumnResponsivePlugin, self).render(context, instance, placeholder)
return context
models.py
class MultiColumn(CMSPlugin):
NUM_OF_COLUMNS = (
(1, '1'),
(2, '2'),
)
num_of_columns = models.IntegerField(default=1, choices=NUM_OF_COLUMNS)
Это желаемый результат, когда я добавляю плагин MultiColumnResponsive с 2 столбцами:
РЕДАКТИРОВАТЬ: после нескольких дней копаться в нем.Я добился этого, добавив несколько строк в функцию save_model
в классе MultiColumnResponsivePlugin:
def save_model(self, request, obj, form, change):
response = super(MultiColumnResponsivePlugin, self).save_model(
request, obj, form, change
)
for x in range(int(form.cleaned_data['num_of_columns'])):
add_plugin(obj.placeholder, ColumnResponsivePlugin.__name__, obj.language, target=obj)
return response