Обновить все объекты ниже удаленного объекта в моделях django?
Я создал класс, который хранит данные для главы в книге, как показано ниже
class Chapters(models.Model):
id = models.AutoField(primary_key=True)
chapter_number = models.IntegerField(blank=True)
name = models.CharField(max_length=255)
slug = models.SlugField(unique=True)
def __str__(self):
return self.name
def save(self, *args, **kwargs):
if not self.chapter_number:
last_chapter = Chapters.objects.latest('chapter_number')
self.chapter_number = last_chapter.chapter_number + 1
self.slug = slugify(self.name)
same_occurrence = Chapters.objects.filter(chapter_number=self.chapter_number).first()
if same_occurrence:
same_occurrence.chapter_number = self.chapter_number + 1
same_occurrence.save()
super(Chapters, self).save(*args, **kwargs)
теперь, согласно функции сохранения главы при добавлении между другими главами (
)id | name | chapter_number |
---|---|---|
1 | ABC | 1 |
2 | BCD | 2 |
3 | CDE | 3 |
), то все следующие главы будут обновлены, так как их номер главы увеличится на единицу.
добавить name=XYZ at chapter_number=2
id | name | chapter_number |
---|---|---|
1 | ABC | 1 |
4 | XYZ | 2 |
2 | BCD | 3 |
3 | CDE | 4 |
но теперь, если я удалю 1 или 4 или 5 глав, то последовательность номеров глав не изменится.
id | name | chapter_number |
---|---|---|
1 | ABC | 1 |
4 | BCD | 2 |
2 | CDE | 3 |
3 | XYZ | 4 |
5 | FGH | 5 |
7 | IJK | 6 |
6 | PQR | 7 |
Я удаляю chapter_number 2, 3, 4
, тогда обновленная таблица должна иметь вид
id | name | chapter_number |
---|---|---|
1 | ABC | 1 |
5 | FGH | 2 |
7 | IJK | 3 |
6 | PQR | 4 |
не так
id | name | chapter_number |
---|---|---|
1 | ABC | 1 |
5 | FGH | 5 |
7 | IJK | 6 |
6 | PQR | 7 |