Создать собственный плагин aldryn_forms

Прежде всего, aldyn_forms отлично подходит для моих пользователей. Теперь я хотел бы добавить пользовательский элемент "range" для Django CMS (<input type="range" />). Я попробовал следующее, но он не отображает элемент. Что я делаю неправильно?

cms_plugins.py:

from aldryn_forms.cms_plugins import Field
from cms.plugin_pool import plugin_pool
from django.forms import Widget
from django.utils.translation import ugettext_lazy as _

from django import forms


class RangeWidget(Widget):
    def __init__(self, attrs=None):
        super().__init__(attrs)

    def render(self, name, value, attrs=None):
        return 'This should render, but it does not render'


class RangeForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        if 'instance' not in kwargs:  # creating new one
            initial = kwargs.pop('initial', {})
            initial['required'] = False
            kwargs['initial'] = initial
        super().__init__(*args, **kwargs)

    class Meta:
        fields = ['label', 'help_text', 'required', 'required_message', 'custom_classes', 'min_value', 'max_value']


class RangeElement(Field):
    widget = RangeWidget

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def widget_attrs(self, widget):
        return super().widget_attrs(widget)


class RangeField(Field):
    name = _('Range Field')

    form = RangeForm
    form_field = RangeElement
    form_field_widget = RangeElement.widget
    fieldset_general_fields = [
        'label',
        ('min_value', 'max_value'),
        'required',
    ]
    fieldset_advanced_fields = [
        'help_text',
        'required_message',
        'custom_classes',
    ]


plugin_pool.register_plugin(RangeField)

1 ответ

Решение

Плагин form_field а также form_field_widget должен указывать на поле формы django и виджеты поля формы.

Вы можете увидеть пример в https://github.com/aldryn/aldryn-forms/blob/master/aldryn_forms/cms_plugins.py

Так RangeElement должен наследовать от класса поля формы Django вместо aldryn-formsField учебный класс.

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