Generated: Wed 2013-03-13 10:33 CET
Source file: /media/Envs/Envs/filer-gallery/lib/python2.7/site-packages/cms/models/fields.py
Stats: 0 executed, 57 missed, 9 excluded, 28 ignored
# -*- coding: utf-8 -*-from cms.forms.fields import PageSelectFormField, PlaceholderFormFieldfrom cms.forms.widgets import PlaceholderPluginEditorWidgetfrom cms.models.pagemodel import Pagefrom cms.models.placeholdermodel import Placeholderfrom cms.utils.placeholder import PlaceholderNoAction, validate_placeholder_namefrom django.db import modelsfrom django.utils.text import capfirstclass PlaceholderField(models.ForeignKey): def __init__(self, slotname, default_width=None, actions=PlaceholderNoAction, **kwargs): validate_placeholder_name(slotname) if kwargs.get('related_name', None) == '+': raise ValueError("PlaceholderField does not support disabling of related names via '+'.") self.slotname = slotname self.default_width = default_width self.actions = actions() kwargs.update({'null': True}) # always allow Null super(PlaceholderField, self).__init__(Placeholder, **kwargs) def formfield(self, **kwargs): """ Returns a django.forms.Field instance for this database Field. """ return self.formfield_for_admin(None, lambda qs: qs, **kwargs) def formfield_for_admin(self, request, filter_func, **kwargs): defaults = {'label': capfirst(self.verbose_name), 'help_text': self.help_text} defaults.update(kwargs) widget = PlaceholderPluginEditorWidget(request, filter_func) widget.choices = [] return PlaceholderFormField(required=False, widget=widget, **defaults) def _get_new_placeholder(self): return Placeholder.objects.create(slot=self.slotname, default_width=self.default_width) def pre_save(self, model_instance, add): if not model_instance.pk: setattr(model_instance, self.name, self._get_new_placeholder()) return super(PlaceholderField, self).pre_save(model_instance, add) def save_form_data(self, instance, data): if not instance.pk: data = self._get_new_placeholder() else: data = getattr(instance, self.name) if not isinstance(data, Placeholder): data = self._get_new_placeholder() super(PlaceholderField, self).save_form_data(instance, data) def south_field_triple(self): "Returns a suitable description of this field for South." # We'll just introspect ourselves, since we inherit. from south.modelsinspector import introspector field_class = "django.db.models.fields.related.ForeignKey" args, kwargs = introspector(self) # That's our definition! return (field_class, args, kwargs) def contribute_to_class(self, cls, name): super(PlaceholderField, self).contribute_to_class(cls, name) if not hasattr(cls._meta, 'placeholder_field_names'): cls._meta.placeholder_field_names = [] if not hasattr(cls._meta, 'placeholder_fields'): cls._meta.placeholder_fields = {} cls._meta.placeholder_field_names.append(name) cls._meta.placeholder_fields[self] = name self.model = clsclass PageField(models.ForeignKey): default_form_class = PageSelectFormField default_model_class = Page def __init__(self, **kwargs): # we call ForeignKey.__init__ with the Page model as parameter... # a PageField can only be a ForeignKey to a Page super(PageField, self).__init__(self.default_model_class, **kwargs) def formfield(self, **kwargs): defaults = { 'form_class': self.default_form_class, } defaults.update(kwargs) return super(PageField, self).formfield(**defaults) def south_field_triple(self): "Returns a suitable description of this field for South." from south.modelsinspector import introspector field_class = "django.db.models.fields.related.ForeignKey" args, kwargs = introspector(self) return (field_class, args, kwargs)