cms_plugins,app_settings: add a setting to overload the profile edit plugin form
This commit is contained in:
parent
8f7485031a
commit
55eb3dbaad
|
@ -5,6 +5,7 @@ class AppSettings(object):
|
|||
'TEMPLATE_VARS': {},
|
||||
'FAVICON_URL': 'http://www.entrouvert.com/favicon.ico',
|
||||
'WCSINST_DEFAULT_VARIABLES': {},
|
||||
'PROFILE_FORM_PLUGIN_FORM_CLASS': 'portail_citoyen.forms.ProfileFormPluginForm',
|
||||
}
|
||||
|
||||
__prefix = 'PORTAIL_CITOYEN_'
|
||||
|
|
|
@ -7,13 +7,16 @@ from cms.plugin_base import CMSPluginBase
|
|||
from cms.plugin_pool import plugin_pool
|
||||
|
||||
|
||||
from . import models, forms, utils
|
||||
from . import models, utils, app_settings
|
||||
|
||||
|
||||
class FormPluginBase(CMSPluginBase):
|
||||
form_class = None
|
||||
no_cancel_button = True
|
||||
|
||||
def get_form_class(self, request, context, instance, placeholder):
|
||||
return self.form_class
|
||||
|
||||
def render(self, context, instance, placeholder):
|
||||
request = context['request']
|
||||
class_name = self.__class__.__name__.lower()
|
||||
|
@ -24,22 +27,22 @@ class FormPluginBase(CMSPluginBase):
|
|||
context['instance'] = instance
|
||||
context['no_cancel_button'] = self.no_cancel_button
|
||||
kwargs = {'prefix': class_name}
|
||||
import pdb
|
||||
pdb.set_trace()
|
||||
if issubclass(self.form_class, ModelForm):
|
||||
form_class = self.get_form_class(request, context, instance,
|
||||
placeholder)
|
||||
if issubclass(form_class, ModelForm):
|
||||
if not hasattr(self, 'get_object'):
|
||||
raise ImproperlyConfigured('Your plugin class is missing a get_object method but use a ModelForm')
|
||||
kwargs['instance'] = context['object'] = self.get_object(request, context, instance, placeholder)
|
||||
if utils.callable_has_arg(self.form_class.__init__, 'plugin_instance'):
|
||||
if utils.callable_has_arg(form_class.__init__, 'plugin_instance'):
|
||||
kwargs['plugin_instance'] = instance
|
||||
if utils.callable_has_arg(self.form_class.__init__, 'request'):
|
||||
if utils.callable_has_arg(form_class.__init__, 'request'):
|
||||
kwargs['request'] = request
|
||||
if request.method == 'POST' and submit in request.POST:
|
||||
form = self.form_class(data=request.POST, **kwargs)
|
||||
form = form_class(data=request.POST, **kwargs)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
else:
|
||||
form = self.form_class(**kwargs)
|
||||
form = form_class(**kwargs)
|
||||
context['form'] = form
|
||||
return context
|
||||
|
||||
|
@ -49,7 +52,16 @@ class ProfileFormPlugin(FormPluginBase):
|
|||
name = _('account form plugin')
|
||||
render_template = 'portail_citoyen/profile_form_plugin.html'
|
||||
text_enabled = True
|
||||
form_class = forms.ProfileFormPluginForm
|
||||
|
||||
def get_form_class(self, request, context, instance, placeholder):
|
||||
try:
|
||||
import importlib
|
||||
except ImportError:
|
||||
from django.utils import importlib
|
||||
form_class_path = app_settings.PROFILE_FORM_PLUGIN_FORM_CLASS
|
||||
module_path, class_name = form_class_path.rsplit('.', 1)
|
||||
module = importlib.import_module(module_path)
|
||||
return getattr(module, class_name)
|
||||
|
||||
def get_object(self, request, context, instance, placeholder):
|
||||
return request.user
|
||||
|
|
Reference in New Issue