From 15d6abf98b55d22498a6fc8c17b3b85aecd9528e Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Thu, 8 Jul 2021 11:31:53 +0200 Subject: [PATCH] use another method to duplicate Media --- teleforma/admin.py | 40 ++++++---------------------------------- 1 file changed, 6 insertions(+), 34 deletions(-) diff --git a/teleforma/admin.py b/teleforma/admin.py index 2690263d..77f7e0e5 100644 --- a/teleforma/admin.py +++ b/teleforma/admin.py @@ -282,42 +282,14 @@ class MediaTranscodedInline(admin.TabularInline): model = MediaTranscoded -def duplicate_model_with_descendants(obj, whitelist, _new_parent_pk=None): - kwargs = {} - children_to_clone = OrderedDict() - for field in obj._meta.get_fields(): - if field.name == "id": - pass - elif field.one_to_many: - if field.name in whitelist: - these_children = list(getattr(obj, field.name).all()) - if children_to_clone.has_key(field.name): - children_to_clone[field.name] |= these_children - else: - children_to_clone[field.name] = these_children - else: - pass - elif field.many_to_one: - if _new_parent_pk: - kwargs[field.name + '_id'] = _new_parent_pk - elif field.concrete: - kwargs[field.name] = getattr(obj, field.name) - else: - pass - new_instance = obj.__class__(**kwargs) - new_instance.save() - new_instance_pk = new_instance.pk - for ky in children_to_clone.keys(): - child_collection = getattr(new_instance, ky) - for child in children_to_clone[ky]: - child_collection.add(duplicate_model_with_descendants(child, whitelist=whitelist, _new_parent_pk=new_instance_pk)) - return new_instance - - @admin.action(description='Duplicate selected medias') def duplicate_medias(modeladmin, request, queryset): - for obj in queryset: - duplicate_model_with_descendants(obj, [MediaTranscoded,]) + for media in queryset: + transcoded_files = list(media.transcoded.values_list('file', flat=True)) + media.id = None + media.save() + transcoded = [MediaTranscoded(file=file, item_id=media.id) for file in transcoded_files] + MediaTranscoded.objects.bulk_create(transcoded) class MediaAdmin(admin.ModelAdmin): -- 2.39.5