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())
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
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)
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)
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
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
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)
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