diff options
| 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 | 
| commit | 8f9adce4b69ba913204c45e6a977dc9a18e0a060 (patch) | |
| tree | b3c0c35defc69ce8441171ae7c5cb68958322f8f /ishtar_common/admin.py | |
| parent | b60b139c047fa0d1ae683a3e66181f5135f007e2 (diff) | |
| download | Ishtar-8f9adce4b69ba913204c45e6a977dc9a18e0a060.tar.bz2 Ishtar-8f9adce4b69ba913204c45e6a977dc9a18e0a060.zip | |
Action: duplicate importer types
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) | 
