diff --git a/pandora/archive/tasks.py b/pandora/archive/tasks.py index a2aa3d8ea..b9f379d2d 100644 --- a/pandora/archive/tasks.py +++ b/pandora/archive/tasks.py @@ -4,6 +4,7 @@ from glob import glob from celery.task import task from django.conf import settings +from django.db import transaction from django.db.models import Q from item.models import Item @@ -248,7 +249,8 @@ def move_media(data, user): if old_item and old_item.files.count() == 0 and i.files.count() == len(data['ids']): for a in old_item.annotations.all().order_by('id'): a.item = i - a.set_public_id() + with transaction.atomic(): + a.set_public_id() Annotation.objects.filter(id=a.id).update(item=i, public_id=a.public_id) old_item.clips.all().update(item=i, sort=i.sort) diff --git a/pandora/item/models.py b/pandora/item/models.py index 31d0631cd..e0aebbd44 100644 --- a/pandora/item/models.py +++ b/pandora/item/models.py @@ -478,7 +478,8 @@ class Item(models.Model): for a in self.annotations.all().order_by('id'): a.item = other - a.set_public_id() + with transaction.atomic(): + a.set_public_id() Annotation.objects.filter(id=a.id).update(item=other, public_id=a.public_id) try: other_sort = other.sort @@ -1910,13 +1911,12 @@ class AnnotationSequence(models.Model): @classmethod def nextid(cls, item): - with transaction.atomic(): - s, created = cls.objects.get_or_create(item=item) - if created: - nextid = s.value - else: - cursor = connection.cursor() - sql = "UPDATE %s SET value = value + 1 WHERE item_id = %s RETURNING value" % (cls._meta.db_table, item.id) - cursor.execute(sql) - nextid = cursor.fetchone()[0] + s, created = cls.objects.get_or_create(item=item) + if created: + nextid = s.value + else: + cursor = connection.cursor() + sql = "UPDATE %s SET value = value + 1 WHERE item_id = %s RETURNING value" % (cls._meta.db_table, item.id) + cursor.execute(sql) + nextid = cursor.fetchone()[0] return "%s/%s" % (item.public_id, ox.toAZ(nextid))