Consider we have the following model:
class Animal(models.Model):
name = models.CharField("Name", max_length=256)
age = models.IntegerField("Age")
class Cat(Animal):
pass
class Dog(Animal):
pass
Lets say, Cat and Dog model don't have fields yet because we don't know yet the requirements. We create migrations first to start working with this simple model. But, someday we realize that Dog model is no longer needed, so we need to delete it. The model became like this:
class Animal(models.Model):
name = models.CharField("Name", max_length=256)
age = models.IntegerField("Age")
class Cat(Animal):
pass
And then, we need to make migrations again. But, after make migrations, I found that there is an error when migrating. The migrations strategy somehow need to rename the table to myapp_dogold, then create new table myapp_dog, and then copy all records in myapp_dogold to myapp_dog. It raise error when using sqlite becase the SQL query looks like this:
INSERT INTO "myapp_dog" () SELECT FROM "myapp_dog__old"
This happens because dog model has no fields.
Duplicate of #24424.
See https://code.djangoproject.com/ticket/24424#comment:23
By the way, this happened to be fixed in master by ad82900ad94ed4bbad050b9993373dafbe66b610 which implemented a safe
[RemoveField, DeleteModel] -> [DeleteModel]
reduction.