Esempio n. 1
0
 def add_defined_field(self, def_field, initial_data=None):
     if initial_data and initial_data.has_key(def_field.name):
         if not def_field.field_class in ('forms.MultipleChoiceField', 'forms.ModelMultipleChoiceField'):
             def_field.initial = initial_data.get(def_field.name)
         else:
             def_field.initial = initial_data.getlist(def_field.name)
     self.fields[def_field.name] = get_class(def_field.field_class)(**def_field.get_form_field_init_args())
Esempio n. 2
0
    def get_form_field_init_args(self):
        args = {
            "required": self.required,
            "label": self.label if self.label else "",
            "initial": self.initial if self.initial else None,
            "help_text": self.help_text,
        }

        if self.field_class in ("django.forms.CharField", "django.forms.EmailField", "django.forms.RegexField"):
            args.update({"max_length": self.max_length, "min_length": self.min_length})

        if self.field_class in ("django.forms.IntegerField", "django.forms.DecimalField"):
            args.update(
                {
                    "max_value": int(self.max_value) if self.max_value != None else None,
                    "min_value": int(self.min_value) if self.min_value != None else None,
                }
            )

        if self.field_class == "django.forms.DecimalField":
            args.update(
                {
                    "max_value": Decimal(str(self.max_value)),
                    "min_value": Decimal(str(self.min_value)),
                    "max_digits": self.max_digits,
                    "decimal_places": self.decimal_places,
                }
            )

        if self.field_class == "django.forms.RegexField":
            if self.regex:
                args.update({"regex": self.regex})

        if self.field_class in ("django.forms.ChoiceField", "django.forms.MultipleChoiceField"):
            if self.choice_values:
                choices = []
                regex = re.compile("[\s]*\n[\s]*")
                values = regex.split(self.choice_values)
                labels = regex.split(self.choice_labels) if self.choice_labels else []
                for index, value in enumerate(values):
                    try:
                        label = labels[index]
                    except:
                        label = value
                    choices.append((value, label))
                args.update({"choices": tuple(choices)})

        if self.field_class in ("django.forms.ModelChoiceField", "django.forms.ModelMultipleChoiceField"):
            args.update({"queryset": ModelNameField.get_model_from_string(self.choice_model).objects.all()})

        if self.field_class == "django.forms.ModelChoiceField":
            args.update({"empty_label": self.choice_model_empty_label})

        if self.widget:
            args.update({"widget": get_class(self.widget)()})

        return args
Esempio n. 3
0
 def add_defined_field(self, def_field, initial_data=None):
     if initial_data and initial_data.has_key(def_field.name):
         if not def_field.field_class in ('django.forms.MultipleChoiceField', 'django.forms.ModelMultipleChoiceField'):
             def_field.initial = initial_data.get(def_field.name)
         else:
             def_field.initial = initial_data.getlist(def_field.name)
     field = get_class(def_field.field_class)(**def_field.get_form_field_init_args())
     self.fields[def_field.name] = field
     if isinstance(field, forms.FileField):
         self.file_fields.append(def_field)
Esempio n. 4
0
 def add_defined_field(self, def_field, initial_data=None):
     if initial_data and initial_data.has_key(def_field.name):
         if not def_field.field_class in ('django.forms.MultipleChoiceField', 'django.forms.ModelMultipleChoiceField'):
             def_field.initial = initial_data.get(def_field.name)
         else:
             def_field.initial = initial_data.getlist(def_field.name)
     field = get_class(def_field.field_class)(**def_field.get_form_field_init_args())
     self.fields[def_field.name] = field
     if isinstance(field, forms.FileField):
         self.file_fields.append(def_field)
Esempio n. 5
0
    def get_form_field_init_args(self):
        args = {
            'required': self.required,
            'label': self.label if self.label else '',
            'initial': self.initial if self.initial else None,
            'help_text': self.help_text,
        }

        if self.field_class in ('django.forms.CharField', 'django.forms.EmailField', 'django.forms.RegexField'):
            args.update({
                'max_length': self.max_length,
                'min_length': self.min_length,
            })

        if self.field_class in ('django.forms.IntegerField', 'django.forms.DecimalField'):
            args.update({
                'max_value': int(self.max_value) if self.max_value != None else None,
                'min_value': int(self.min_value) if self.min_value != None else None,
            })

        if self.field_class == 'django.forms.DecimalField':
            args.update({
                'max_value': Decimal(str(self.max_value)),
                'min_value': Decimal(str(self.min_value)),
                'max_digits': self.max_digits,
                'decimal_places': self.decimal_places,
            })

        if self.field_class == 'django.forms.RegexField':
            if self.regex:
                args.update({
                    'regex': self.regex
                })

        if self.field_class in ('django.forms.ChoiceField', 'django.forms.MultipleChoiceField'):
            if self.choice_values:
                choices = []
                regex = re.compile('[\s]*\n[\s]*')
                values = regex.split(self.choice_values)
                labels = regex.split(self.choice_labels) if self.choice_labels else []
                for index, value in enumerate(values):
                    try:
                        label = labels[index]
                    except:
                        label = value
                    choices.append((value, label))
                args.update({
                    'choices': tuple(choices)
                })

        if self.field_class in ('django.forms.ModelChoiceField', 'django.forms.ModelMultipleChoiceField'):
            args.update({
                'queryset': ModelNameField.get_model_from_string(self.choice_model).objects.all()
            })

        if self.field_class == 'django.forms.ModelChoiceField':
            args.update({
                'empty_label': self.choice_model_empty_label
            })

        if self.widget:
            args.update({
                'widget': get_class(self.widget)()
            })

        return args
Esempio n. 6
0
    def get_form_field_init_args(self):
        args = {
            'required': self.required,
            'label': self.label if self.label else '',
            'initial': self.initial if self.initial else None,
            'help_text': self.help_text,
        }

        if self.field_class in ('django.forms.CharField',
                                'django.forms.EmailField',
                                'django.forms.RegexField'):
            args.update({
                'max_length': self.max_length,
                'min_length': self.min_length,
            })

        if self.field_class in ('django.forms.IntegerField',
                                'django.forms.DecimalField'):
            args.update({
                'max_value':
                int(self.max_value) if self.max_value != None else None,
                'min_value':
                int(self.min_value) if self.min_value != None else None,
            })

        if self.field_class == 'django.forms.DecimalField':
            args.update({
                'max_value':
                Decimal(str(self.max_value))
                if self.max_value != None else None,
                'min_value':
                Decimal(str(self.min_value))
                if self.max_value != None else None,
                'max_digits':
                self.max_digits,
                'decimal_places':
                self.decimal_places,
            })

        if self.field_class == 'django.forms.RegexField':
            if self.regex:
                args.update({'regex': self.regex})

        if self.field_class in ('django.forms.ChoiceField',
                                'django.forms.MultipleChoiceField'):
            if self.choice_values:
                choices = []
                regex = re.compile('[\s]*\n[\s]*')
                values = regex.split(self.choice_values)
                labels = regex.split(
                    self.choice_labels) if self.choice_labels else []
                for index, value in enumerate(values):
                    try:
                        label = labels[index]
                    except:
                        label = value
                    choices.append((value, label))
                args.update({'choices': tuple(choices)})

        if self.field_class in ('django.forms.ModelChoiceField',
                                'django.forms.ModelMultipleChoiceField'):
            args.update({
                'queryset':
                ModelNameField.get_model_from_string(
                    self.choice_model).objects.all()
            })

        if self.field_class == 'django.forms.ModelChoiceField':
            args.update({'empty_label': self.choice_model_empty_label})

        if self.widget:
            args.update({'widget': get_class(self.widget)()})

        return args
Esempio n. 7
0
class FormLogAdmin(admin.ModelAdmin):
    list_display = ('form_no_link', 'created', 'id', 'created_by', 'data_html')
    list_filter = ('form_definition',)
    list_display_links = ()

    exporter_classes = {}
    exporter_classes_ordered = []
    for class_path in settings.EXPORTER_CLASSES:
        cls = get_class(class_path)
        if cls.is_enabled():
            exporter_classes[cls.export_format()] = cls 
            exporter_classes_ordered.append(cls)

    def get_exporter_classes(self):
        return self.__class__.exporter_classes_ordered

    def get_actions(self, request):
        actions = super(FormLogAdmin, self).get_actions(request)

        for cls in self.get_exporter_classes():
            desc = _("Export selected %%(verbose_name_plural)s as %s") % cls.export_format()
            actions[cls.export_format()] = (cls.export_view, cls.export_format(), desc)
            
        return actions

    # Disabling all edit links: Hack as found at http://stackoverflow.com/questions/1618728/disable-link-to-edit-object-in-djangos-admin-display-list-only
    def form_no_link(self, obj):
        return '<a>'+obj.form_definition.__unicode__()+'</a>'
    form_no_link.admin_order_field = 'form_definition'
    form_no_link.allow_tags = True
    form_no_link.short_description = _('Form')

    def get_urls(self):
        urls = patterns('',
            url(r'^export/(?P<format>[a-zA-Z0-9_-]+)/$', self.admin_site.admin_view(self.export_view), name='form_designer_export'),
        )
        return urls + super(FormLogAdmin, self).get_urls()

    def data_html(self, obj):
        return obj.form_definition.compile_message(obj.data, 'html/formdefinition/data_message.html')
    data_html.allow_tags = True
    data_html.short_description = _('Data')

    def get_change_list_query_set(self, request):
        cl = ChangeList(request, self.model, self.list_display, self.list_display_links, self.list_filter,
            self.date_hierarchy, self.search_fields, self.list_select_related, self.list_per_page, self.list_editable, self)
        return cl.get_query_set()

    def export_view(self, request, format):
        queryset = self.get_change_list_query_set(request)
        if not format in self.exporter_classes:
            raise Http404()
        return self.exporter_classes[format](self.model).export(request, queryset)

    def changelist_view(self, request, extra_context=None):
        from django.core.urlresolvers import reverse, NoReverseMatch
        extra_context = extra_context or {}
        try:
            query_string = '?'+request.META['QUERY_STRING']
        except (TypeError, KeyError):
            query_string = ''

        exporter_links = [] 
        for cls in self.get_exporter_classes():
            url = reverse('admin:form_designer_export', args=(cls.export_format(),))+query_string
            exporter_links.append({'url': url, 'label': _('Export view as %s') % cls.export_format()})

        extra_context['exporters'] = exporter_links

        return super(FormLogAdmin, self).changelist_view(request, extra_context)
Esempio n. 8
0
    def get_form_field_init_args(self):
        args = {
            'required': self.required,
            'label': self.label if self.label else '',
            'initial': self.initial if self.initial else None,
            'help_text': self.help_text,
        }

        if self.field_class in ('django.forms.CharField', 'django.forms.EmailField', 'django.forms.RegexField'):
            args.update({
                'max_length': self.max_length,
                'min_length': self.min_length,
            })

        if self.field_class in ('django.forms.IntegerField', 'django.forms.DecimalField'):
            args.update({
                'max_value': int(self.max_value) if self.max_value != None else None,
                'min_value': int(self.min_value) if self.min_value != None else None,
            })

        if self.field_class == 'django.forms.DecimalField':
            args.update({
                'max_value': None if self.max_value == '' or self.max_value is None else Decimal(str(self.max_value)),
                'min_value': None if self.min_value == '' or self.min_value is None else Decimal(str(self.min_value)),
                'max_digits': self.max_digits,
                'decimal_places': self.decimal_places,
            })

        if self.field_class == 'django.forms.RegexField':
            if self.regex:
                args.update({
                    'regex': self.regex
                })

        if self.field_class in ('django.forms.ChoiceField', 'django.forms.MultipleChoiceField'):
            if self.choice_values:
                choices = []
                regex = re.compile('[\s]*\n[\s]*')
                values = regex.split(self.choice_values)
                labels = regex.split(self.choice_labels) if self.choice_labels else []
                for index, value in enumerate(values):
                    try:
                        label = labels[index]
                    except:
                        label = value
                    choices.append((value, label))
                args.update({
                    'choices': tuple(choices)
                })
        
        if getattr(django_settings, 'FORM_DESIGNER_INITIAL_CHOICE_EMPTY', False) \
            and self.field_class == 'django.forms.ChoiceField' \
            and not self.widget:
                choices = list(args['choices'])
                choices.insert(0, ('', _('Please Select...')))
                args['choices'] = choices

        if self.field_class in ('django.forms.ModelChoiceField', 'django.forms.ModelMultipleChoiceField'):
            args.update({
                'queryset': ModelNameField.get_model_from_string(self.choice_model).objects.all()
            })

        if self.field_class == 'django.forms.ModelChoiceField':
            args.update({
                'empty_label': self.choice_model_empty_label
            })

        if self.widget:
            args.update({
                'widget': get_class(self.widget)()
            })

        return args