Как задать общую форму (ModelForm) для многих плагинов в Django CMS?
Я использую Django 2.2 и Django CMS 3.7.1
У меня есть плагин, определенный следующим образом:
cms_plugins.py
@plugin_pool.register_plugin
class BackgroundImagePlugin(CMSPluginBase):
""" Background Image """
name = "Background Image"
model = models.GenericBackgroundImage
form = admin.GenericPluginFormWithSettings
render_template = "plugins/ofc/BackgroundImageFormBoxCta.html"
У меня также есть общая ModelForm("GenericPluginFormWithSettings"), которую я создаю. Я передаю эту форму плагину выше.
Вот этот класс ModelForm:
admin.py
class GenericPluginFormWithSettings(ModelForm):
class Meta:
fields = '__all__'
def __init__(self, *args, **kwargs):
super(GenericPluginFormWithSettings, self).__init__(*args, **kwargs)
raw_keys = list(self.fields.keys())
raw_keys.remove('top_margin')
raw_keys.remove('bottom_margin')
raw_keys.append('top_margin')
raw_keys.append('bottom_margin')
# raw_keys is in the right order here
self.Meta.fields = raw_keys
self.order_fields(raw_keys)
Целью этого класса формы общей модели является постоянное перемещение двух полей (верхнее поле и нижнее поле) в самый низ порядка для любого плагина, на котором они реализованы. Это не позволяет упорядочить поля в нужном мне порядке.
Единственное, что работает, это когда я жестко кодирую порядок полей следующим образом:
class GenericPluginFormWithSettings(ModelForm):
class Meta:
fields = ['image', 'header', 'top_margin', 'bottom_margin']
Но очевидно, что я не могу жестко закодировать их, потому что тогда я не смогу использовать этот класс ModelForm со многими различными плагинами, отличными от тех, которые имеют image and
header`.
Как я могу реализовать общую форму ModelForm, изменяющую порядок полей, которую я затем могу использовать в плагине?