diff --git a/examples/simple/override_select_model_object_plugin/__init__.py b/examples/simple/override_select_model_object_plugin/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/examples/simple/override_select_model_object_plugin/fobi_form_elements.py b/examples/simple/override_select_model_object_plugin/fobi_form_elements.py new file mode 100644 index 00000000..b203bd92 --- /dev/null +++ b/examples/simple/override_select_model_object_plugin/fobi_form_elements.py @@ -0,0 +1,67 @@ +from django.db import models +from django.forms.models import ModelChoiceField +from django.forms.widgets import Select +from django.utils.translation import ugettext_lazy as _ + +from fobi.base import FormFieldPlugin, form_element_plugin_registry, get_theme +from fobi.helpers import safe_text +from fobi.contrib.plugins.form_elements.fields.select_model_object import UID +from override_select_model_object_plugin.forms \ + import SelectModelObjectInputForm + +theme = get_theme(request=None, as_instance=True) + +class SelectModelObjectInputPlugin(FormFieldPlugin): + """ + Select model object field plugin. + """ + uid = UID + name = _("Select model object") + group = _("Fields") + form = SelectModelObjectInputForm + + def get_form_field_instances(self): + """ + Get form field instances. + """ + app_label, model_name = self.data.model.split('.') + model = models.get_model(app_label, model_name) + queryset = model._default_manager.all() + + kwargs = { + 'label': self.data.label, + 'help_text': self.data.help_text, + 'initial': self.data.initial, + 'required': self.data.required, + 'queryset': queryset, + 'widget': Select(attrs={'class': theme.form_element_html_class}), + } + + return [(self.data.name, ModelChoiceField, kwargs)] + + def submit_plugin_form_data(self, form_entry, request, form): + """ + Submit plugin form data/process. + + :param fobi.models.FormEntry form_entry: Instance of + ``fobi.models.FormEntry``. + :param django.http.HttpRequest request: + :param django.forms.Form form: + """ + # Get the object + obj = form.cleaned_data.get(self.data.name, None) + if obj: + # Handle the submitted form value + value = '{0}'.format( + safe_text(obj) + ) + + # Overwrite ``cleaned_data`` of the ``form`` with object qualifier. + form.cleaned_data[self.data.name] = value + + # It's critically important to return the ``form`` with updated + # ``cleaned_data`` + return form + + +form_element_plugin_registry.register(SelectModelObjectInputPlugin, force=True) diff --git a/examples/simple/override_select_model_object_plugin/forms.py b/examples/simple/override_select_model_object_plugin/forms.py new file mode 100644 index 00000000..d9ea9f56 --- /dev/null +++ b/examples/simple/override_select_model_object_plugin/forms.py @@ -0,0 +1,63 @@ +from django import forms +from django.utils.translation import ugettext_lazy as _ + +from fobi.base import BaseFormFieldPluginForm, get_theme +from fobi.helpers import get_registered_models +from fobi.contrib.plugins.form_elements.fields.select_model_object.settings \ + import IGNORED_MODELS + +theme = get_theme(request=None, as_instance=True) + +class SelectModelObjectInputForm(forms.Form, BaseFormFieldPluginForm): + """ + Form for ``SelectModelObjectPlugin``. + """ + plugin_data_fields = [ + ("label", ""), + ("name", ""), + ("model", ""), + ("help_text", ""), + ("initial", ""), + ("required", False) + ] + + label = forms.CharField( + label = _("Label"), + required = True, + widget = forms.widgets.TextInput(attrs={'class': theme.form_element_html_class}) + ) + name = forms.CharField( + label = _("Name"), + required = True, + widget = forms.widgets.TextInput(attrs={'class': theme.form_element_html_class}) + ) + model = forms.ChoiceField( + label = _("Model"), + choices = [], + required = False, + widget = forms.widgets.Select(attrs={'class': theme.form_element_html_class}) + ) + help_text = forms.CharField( + label = _("Help text"), + required = False, + widget = forms.widgets.Textarea(attrs={'class': theme.form_element_html_class}) + ) + initial = forms.CharField( + label = _("Initial"), + required = False, + widget = forms.widgets.TextInput(attrs={'class': theme.form_element_html_class}) + ) + required = forms.BooleanField( + label = _("Required"), + required = False, + widget = forms.widgets.CheckboxInput(attrs={'class': theme.form_element_checkbox_html_class}) + ) + + def __init__(self, *args, **kwargs): + """ + In order to avoid static calls to `get_registered_models`. + """ + super(SelectModelObjectInputForm, self).__init__(*args, **kwargs) + self.fields['model'].choices = get_registered_models( + ignore = IGNORED_MODELS + ) diff --git a/examples/simple/runserver-override-select-model-object-plugin.sh b/examples/simple/runserver-override-select-model-object-plugin.sh new file mode 100755 index 00000000..f4de7456 --- /dev/null +++ b/examples/simple/runserver-override-select-model-object-plugin.sh @@ -0,0 +1,2 @@ +#workon fobi +./manage.py runserver 0.0.0.0:8003 --settings=settings_override_select_model_object_plugin --traceback -v 3 diff --git a/examples/simple/runserver-override-simple-theme.sh b/examples/simple/runserver-override-simple-theme.sh index a04340f0..9f979303 100755 --- a/examples/simple/runserver-override-simple-theme.sh +++ b/examples/simple/runserver-override-simple-theme.sh @@ -1,2 +1,2 @@ #workon fobi -./manage.py runserver 0.0.0.0:8003 --settings=settings_override_simple_theme --traceback -v 3 +./manage.py runserver 0.0.0.0:8003 --settings=settings_override_simple_theme --traceback -v 3 diff --git a/examples/simple/settings_override_select_model_object_plugin.py b/examples/simple/settings_override_select_model_object_plugin.py new file mode 100644 index 00000000..d9aaa2df --- /dev/null +++ b/examples/simple/settings_override_select_model_object_plugin.py @@ -0,0 +1,16 @@ +from nine.versions import DJANGO_GTE_1_7 + +from settings import * + +INSTALLED_APPS = list(INSTALLED_APPS) + +try: + INSTALLED_APPS.append('override_select_model_object_plugin') +except Exception as e: + pass + +if DJANGO_GTE_1_7: + try: + INSTALLED_APPS.remove('south') if 'south' in INSTALLED_APPS else None + except: + pass diff --git a/examples/simple/settings_override_simple_theme.py b/examples/simple/settings_override_simple_theme.py index 27346c0a..a5945f4b 100644 --- a/examples/simple/settings_override_simple_theme.py +++ b/examples/simple/settings_override_simple_theme.py @@ -1,3 +1,5 @@ +from nine.versions import DJANGO_GTE_1_7 + from settings import * INSTALLED_APPS = list(INSTALLED_APPS) @@ -7,4 +9,10 @@ try: except Exception as e: pass +if DJANGO_GTE_1_7: + try: + INSTALLED_APPS.remove('south') if 'south' in INSTALLED_APPS else None + except: + pass + FOBI_DEFAULT_THEME = 'simple' diff --git a/src/fobi/contrib/plugins/form_elements/fields/select_model_object/fobi_form_elements.py b/src/fobi/contrib/plugins/form_elements/fields/select_model_object/fobi_form_elements.py index 2f521d5b..5c81a66a 100644 --- a/src/fobi/contrib/plugins/form_elements/fields/select_model_object/fobi_form_elements.py +++ b/src/fobi/contrib/plugins/form_elements/fields/select_model_object/fobi_form_elements.py @@ -10,7 +10,7 @@ from django.forms.widgets import Select from django.utils.translation import ugettext_lazy as _ from fobi.base import FormFieldPlugin, form_element_plugin_registry, get_theme -from fobi.helpers import safe_text #, admin_change_url +from fobi.helpers import safe_text from fobi.contrib.plugins.form_elements.fields.select_model_object import UID from fobi.contrib.plugins.form_elements.fields.select_model_object.forms \ import SelectModelObjectInputForm @@ -58,11 +58,6 @@ class SelectModelObjectInputPlugin(FormFieldPlugin): obj = form.cleaned_data.get(self.data.name, None) if obj: # Handle the submitted form value - #admin_url = admin_change_url( - # app_label = obj._meta.app_label, - # module_name = obj._meta.module_name, - # object_id = obj.pk - # ) value = '{0}.{1}.{2}.{3}'.format( obj._meta.app_label, obj._meta.module_name, diff --git a/src/fobi/contrib/plugins/form_elements/fields/select_model_object/settings.py b/src/fobi/contrib/plugins/form_elements/fields/select_model_object/settings.py index fc0b3580..0b3a8189 100644 --- a/src/fobi/contrib/plugins/form_elements/fields/select_model_object/settings.py +++ b/src/fobi/contrib/plugins/form_elements/fields/select_model_object/settings.py @@ -4,6 +4,7 @@ __copyright__ = 'Copyright (c) 2014 Artur Barseghyan' __license__ = 'GPL 2.0/LGPL 2.1' __all__ = ('IGNORED_MODELS',) -from fobi.contrib.plugins.form_elements.fields.select_model_object.conf import get_setting +from fobi.contrib.plugins.form_elements.fields.select_model_object.conf \ + import get_setting IGNORED_MODELS = get_setting('IGNORED_MODELS')