From: Guillaume Pellerin Date: Thu, 8 Jul 2021 09:31:53 +0000 (+0200) Subject: use another method to duplicate Media X-Git-Tag: 2.3~9^2~5 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=15d6abf98b55d22498a6fc8c17b3b85aecd9528e;p=teleforma.git use another method to duplicate Media --- 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):