Историческая модель не позволяет удалять данные при возврате миграции данных django

У меня две модели

class A(models.Model):
    index = models.SmallIntegerField(primary_key=True)
    audio = models.FileField(null=True, blank=True)
    x = models.SmallIntegerField()
    y = models.SmallIntegerField(null=True, blank=True)

и

class B(models.Model):
    b = models.ForeignKey(B, on_delete=models.CASCADE)
    index = models.SmallIntegerField()
    audio = models.FileField(null=True, blank=True)
    image = models.FileField(null=True, blank=True)

Я сделал миграцию данных, которая инициализирует объекты модели A (каждый объект также создает объекты B, а каждый созданный B также создает объекты C). Вот миграция:

from django.db import migrations


def create_as(apps, schema_editor):
    A = apps.get_model('super_app', 'A')
    B = apps.get_model('super_app', 'B')
    C = apps.get_model('super_app', 'C')  # C has FK referencing B
    # Some logic here that creates instances of A (also creates B and C)

def delete_as(apps, schema_editor):
    A = apps.get_model('super_app', 'A')
    A.objects.all().delete()


class Migration(migrations.Migration):

    dependencies = [
        ('super_app', '00xx_the_very_previous_migration'),
    ]

    operations = [
        migrations.RunPython(create_as, delete_as)
    ]

Миграция успешно применяется вперед... но когда я пытаюсь вернуть миграцию назад (которая должна вызывать delete_as), я всегда получаю эту ошибку:

ValueError: Cannot query "B object (757)": Must be "B" instance.

Я пробовал и копал, но не знаю, почему это происходит! Примечание: Тип моделей в миграциях - исторические модели (__fake__.{MODEL}) Я попытался использовать последнее состояние модели, сделав:

def delete_as(apps, schema_editor):
    A = apps.get_model('super_app', 'A')
    from django.apps import apps  # FIXME. This gives latest models state.
    B = apps.get_model('super_app', 'B')
    B.objects.all().delete()
    A.objects.all().delete()

И это сработало без проблем, и я смог вернуть миграцию!!! Но, согласно документации Django, это не должно использоваться.

Есть идеи, почему это происходит?

Вернуться на верх