diff options
Diffstat (limited to 'ishtar_common/admin.py')
-rw-r--r-- | ishtar_common/admin.py | 59 |
1 files changed, 57 insertions, 2 deletions
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index 297da941e..bc68c8ea6 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -25,7 +25,7 @@ from ajax_select.fields import AutoCompleteSelectField, \ from django.conf import settings from django.conf.urls import url -from django.contrib import admin +from django.contrib import admin, messages from django.contrib.admin.views.main import ChangeList from django.contrib.auth.admin import GroupAdmin, UserAdmin from django.contrib.auth.models import Group, User @@ -48,7 +48,7 @@ from django import forms from ishtar_common import models from ishtar_common.apps import admin_site -from ishtar_common.utils import get_cache +from ishtar_common.utils import get_cache, create_slug from ishtar_common import forms as common_forms from archaeological_files import forms as file_forms @@ -493,8 +493,63 @@ class ImporterDefaultAdmin(admin.ModelAdmin): admin_site.register(models.ImporterDefault, ImporterDefaultAdmin) +def duplicate_importertype(modeladmin, request, queryset): + for obj in queryset.order_by('pk'): + old_pk = obj.pk + obj.pk = None + obj.slug = create_slug(models.ImporterType, obj.name) + obj.name = obj.name + u" - duplicate" + obj.name = obj.name[:200] + obj.save() # create new + old_obj = modeladmin.model.objects.get(pk=old_pk) + + for m in old_obj.created_models.all(): + obj.created_models.add(m) + + for u in old_obj.users.all(): + obj.users.add(u) + + for default in old_obj.defaults.all(): + default_pk = default.pk + default.pk = None # create new + default.importer_type = obj + default.save() + old_default = default.__class__.objects.get(pk=default_pk) + for def_value in old_default.default_values.all(): + def_value.pk = None + def_value.default_target = default + def_value.save() + for col in old_obj.columns.all(): + col_pk = col.pk + col.pk = None # create new + col.importer_type = obj + col.save() + old_col = col.__class__.objects.get(pk=col_pk) + for df in old_col.duplicate_fields.all(): + df.pk = None # create new + df.column = col + df.save() + for tg in old_col.targets.all(): + tg.pk = None # create new + tg.column = col + tg.save() + messages.add_message( + request, messages.INFO, + unicode(_(u"{} importer type(s) duplicated.")).format(queryset.count())) + url = reverse( + 'admin:%s_%s_changelist' % ( + modeladmin.model._meta.app_label, + modeladmin.model._meta.model_name) + ) + return HttpResponseRedirect(url) + + +duplicate_importertype.short_description = _(u"Duplicate") + + class ImporterTypeAdmin(admin.ModelAdmin): list_display = ('name', 'associated_models', 'available') + actions = [duplicate_importertype] admin_site.register(models.ImporterType, ImporterTypeAdmin) |