From e94e5be87801a4a582315f18a36d107df381e175 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Tue, 22 Aug 2023 11:32:18 +0200 Subject: [PATCH] Item creation: Fix bug in copying meta data --- src/pretix/control/forms/item.py | 5 ----- src/pretix/control/views/item.py | 17 ++++++++++++++--- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/pretix/control/forms/item.py b/src/pretix/control/forms/item.py index 748842ab2d..5a5ea3a6fa 100644 --- a/src/pretix/control/forms/item.py +++ b/src/pretix/control/forms/item.py @@ -461,11 +461,6 @@ class ItemCreateForm(I18nModelForm): ) if self.cleaned_data.get('copy_from'): - for mv in self.cleaned_data['copy_from'].meta_values.all(): - mv.pk = None - mv.item = instance - mv.save(force_insert=True) - for question in self.cleaned_data['copy_from'].questions.all(): question.items.add(instance) question.log_action('pretix.event.question.changed', user=self.user, data={ diff --git a/src/pretix/control/views/item.py b/src/pretix/control/views/item.py index b3d46f4154..18f5a56e8a 100644 --- a/src/pretix/control/views/item.py +++ b/src/pretix/control/views/item.py @@ -1195,19 +1195,30 @@ class MetaDataEditorMixin: else: val_instances = {} + if getattr(self, 'copy_from', None): + defaults = { + v.property_id: v.value for v in self.copy_from.meta_values.all() + } + else: + defaults = {} + formlist = [] for p in self.request.event.item_meta_properties.all(): - formlist.append(self._make_meta_form(p, val_instances)) + formlist.append(self._make_meta_form(p, val_instances, defaults)) return formlist - def _make_meta_form(self, p, val_instances): + def _make_meta_form(self, p, val_instances, defaults): return self.meta_form( prefix='prop-{}'.format(p.pk), property=p, instance=val_instances.get( p.pk, - self.meta_model(property=p, item=self.object if getattr(self, 'object', None) else None) + self.meta_model( + property=p, + item=self.object if getattr(self, 'object', None) else None, + value=defaults.get(p.pk, None) + ) ), data=(self.request.POST if self.request.method == "POST" else None) )