2016-12-15 11 views
0

まず、aldyn_formsは私のユーザーには最適です。今私はDjango CMS(<input type="range" />)用のカスタム "range"要素を追加したいと思います。私は以下を試しましたが、要素を描画しません。私は間違って何をしていますか?カスタムaldryn_formsプラグインを作成する

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_fieldform_field_widgetは、Djangoのフォームフィールドをポイントし、フィールドウィジェットを形成すべきです。

あなたはとてもRangeElementではなくaldryn-formsFieldクラスのDjangoのフォームフィールドのクラスから継承する必要がありますhttps://github.com/aldryn/aldryn-forms/blob/master/aldryn_forms/cms_plugins.py#L740

の例を見ることができます。

+0

ありがとうございます!私はまた、私のプラグインをフォームにラップするのを忘れていたので、それはレンダリングされませんでした... –

関連する問題