mirror of
https://github.com/pretix/pretix.git
synced 2026-05-11 16:13:59 +00:00
handle new duplicates in EventMetaValue.{event,property}
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
# Generated by Django 5.2.12 on 2026-04-28 11:34
|
# Generated by Django 5.2.12 on 2026-04-28 11:34
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import IntegrityError, migrations, transaction
|
||||||
from django.db.models import Count, F
|
from django.db.models import Count, F
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -17,6 +17,10 @@ def fix_cross_organizer_eventmetavalues(apps, schema_editor):
|
|||||||
try:
|
try:
|
||||||
emv.property = emv.event.organizer.meta_properties.filter(name=emv.property.name).first()
|
emv.property = emv.event.organizer.meta_properties.filter(name=emv.property.name).first()
|
||||||
logger.info(f' found existing EventMetaProperty in {emv.event.organizer.slug}')
|
logger.info(f' found existing EventMetaProperty in {emv.event.organizer.slug}')
|
||||||
|
if EventMetaValue.objects.filter(event=emv.event, property=emv.property).exists():
|
||||||
|
logger.info(f' EventMetaValue with property in correct organizer already exists, deleting the cross-organizer one')
|
||||||
|
emv.delete()
|
||||||
|
continue
|
||||||
except EventMetaProperty.DoesNotExist:
|
except EventMetaProperty.DoesNotExist:
|
||||||
meta_prop = emv.property
|
meta_prop = emv.property
|
||||||
meta_prop.pk = None
|
meta_prop.pk = None
|
||||||
@@ -24,7 +28,6 @@ def fix_cross_organizer_eventmetavalues(apps, schema_editor):
|
|||||||
meta_prop.save(force_insert=True)
|
meta_prop.save(force_insert=True)
|
||||||
logger.info(f' created new EventMetaProperty')
|
logger.info(f' created new EventMetaProperty')
|
||||||
emv.property = meta_prop
|
emv.property = meta_prop
|
||||||
# TODO: how to handle new duplicates in EventMetaValue.property
|
|
||||||
logger.info(f' after: {emv.property.name}({emv.property.id}@{emv.property.organizer.slug}) = {emv.value}')
|
logger.info(f' after: {emv.property.name}({emv.property.id}@{emv.property.organizer.slug}) = {emv.value}')
|
||||||
emv.save()
|
emv.save()
|
||||||
|
|
||||||
@@ -42,7 +45,8 @@ def make_eventmetaproperties_unique(apps, schema_editor):
|
|||||||
target = props[0]
|
target = props[0]
|
||||||
invalid = props[1:]
|
invalid = props[1:]
|
||||||
|
|
||||||
# TODO: how to handle new duplicates in EventMetaValue.property
|
try:
|
||||||
|
with transaction.atomic():
|
||||||
affected = EventMetaValue.objects.filter(
|
affected = EventMetaValue.objects.filter(
|
||||||
event__organizer=dup['organizer'], property__in=invalid
|
event__organizer=dup['organizer'], property__in=invalid
|
||||||
).update(
|
).update(
|
||||||
@@ -50,6 +54,16 @@ def make_eventmetaproperties_unique(apps, schema_editor):
|
|||||||
)
|
)
|
||||||
logger.info(f' Switching {affected} value(s) over to {target.name}({target.id}@{target.organizer.slug})')
|
logger.info(f' Switching {affected} value(s) over to {target.name}({target.id}@{target.organizer.slug})')
|
||||||
|
|
||||||
|
except IntegrityError as e:
|
||||||
|
logger.info(f' Failed to switch all value(s) over to {target.name}({target.id}@{target.organizer.slug})')
|
||||||
|
logger.info(f' {e}')
|
||||||
|
for prop in invalid:
|
||||||
|
newname = f'{prop.name}_DUPLICATE_{prop.id}'
|
||||||
|
logger.info(f' Renaming {prop.name}({prop.id}@{prop.organizer.slug}) to {newname}({prop.id}@{prop.organizer.slug})')
|
||||||
|
prop.name = newname
|
||||||
|
prop.save()
|
||||||
|
|
||||||
|
else:
|
||||||
for prop in invalid:
|
for prop in invalid:
|
||||||
logger.info(f' Deleting {prop.name}({prop.id}@{prop.organizer.slug})')
|
logger.info(f' Deleting {prop.name}({prop.id}@{prop.organizer.slug})')
|
||||||
prop.delete()
|
prop.delete()
|
||||||
|
|||||||
Reference in New Issue
Block a user