summaryrefslogtreecommitdiff
path: root/ishtar_common/admin.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2018-05-21 16:11:57 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2018-06-12 08:44:34 +0200
commit8f9adce4b69ba913204c45e6a977dc9a18e0a060 (patch)
treeb3c0c35defc69ce8441171ae7c5cb68958322f8f /ishtar_common/admin.py
parentb60b139c047fa0d1ae683a3e66181f5135f007e2 (diff)
downloadIshtar-8f9adce4b69ba913204c45e6a977dc9a18e0a060.tar.bz2
Ishtar-8f9adce4b69ba913204c45e6a977dc9a18e0a060.zip
Action: duplicate importer types
Diffstat (limited to 'ishtar_common/admin.py')
-rw-r--r--ishtar_common/admin.py59
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)