Я пытаюсь изменить некоторые записи базы данных из одного допустимого состояния в другое, но промежуточное (частично обновленное) состояние недопустимо.Например, предположим, что я моделирую лекции, каждая из которых состоит из нескольких коротких тем в некотором порядке:
class Lecture(models.Model):
slug = models.TextField(
help_text='Abbreviated name of lecture.'
)
class Topic(models.Model):
slug = models.TextField(
help_text='Abbreviated name of topic.'
)
lecture = models.ForeignKey(
Lecture,
help_text='The lecture this topic is part of.'
)
order = models.IntegerField(
help_text='Impose ordering on topics.'
)
class Meta:
unique_together = (('lecture', 'order'),)
Мой тестовый пример:
class TestTopicOrder(TestCase):
def test_reordering_topics(self):
# The lecture these topics are part of.
lecture = Lecture(title='Test Lecture', slug='lec')
lecture.save()
# Two topics 'zero' and 'one' in that order.
Topic(lecture=lecture, slug='zero', order=0).save()
Topic(lecture=lecture, slug='one, order=1).save()
# Try to invert the order.
t0 = Topic.objects.get(slug='zero')
t1 = Topic.objects.get(slug='one')
t0.order = 1
t1.order = 0
t0.save()
t1.save()
Я пытаюсь сделать:
t0.order, t1.order = t1.order, t0.order
и затем сохранить, но любой измененный объект, который я сохраню первым, будет иметь то же значение 'порядка', что и другая запись.Я мог бы удалить и переделать, но когда придет время переупорядочить дюжину тем сразу, это будет боль.Какой самый чистый способ сделать это?