У меня было две модели под названием CombinedProduct и CombinedProductPrice, которые я переименовал в Set и SetPrice соответственно. Я сделал это, изменив название модели в файле models.py и заменив все его вхождения. Это также включало переименование поля внешнего ключа в другой модели с Commander_product на set (указывающее на CombinedProduct).
При запуске makemigrations django правильно обнаружил переименование и спросил, переименовал ли я все три из этих вещей, и я нажал «да» для всех. Однако при запуске "migrate" после применения некоторых вещей меня спрашивают:
The following content types are stale and need to be deleted:
product | combinedproduct
product | combinedproductprice
Any objects related to these content types by a foreign key will also
be deleted. Are you sure you want to delete these content types?
If you're unsure, answer 'no'.
Я сделал резервную копию своих данных и ввел «да», в результате чего были удалены все экземпляры Set (ранее CombinedProduct) и SetPrice (ранее CombinedProductPrice). Если я откатываюсь и ставлю галочку «Нет», то этот вопрос возникает каждый раз при миграции.
Это странно, поскольку я нигде не использую фреймворк django ContentType. Однако при проверке того, какие поля указывают на ContentType, я вижу, что auth.permission указывает на него, и я использую разрешения для этих моделей. Так, может быть, каскады удаления из старых разрешений указывают на старые имена моделей, которые, в свою очередь, удалят мои экземпляры? Если это так, как я могу предотвратить эту ситуацию?
Это сгенерированная миграция:
operations = [
migrations.RenameModel(
old_name='CombinedProduct',
new_name='Set',
),
migrations.RenameModel(
old_name='CombinedProductPrice',
new_name='SetPrice',
),
migrations.AlterModelOptions(
name='setprice',
options={'ordering': ('set', 'vendor', 'price'), 'verbose_name': 'Set price', 'verbose_name_plural': 'Set prices'},
),
migrations.RenameField(
model_name='setprice',
old_name='combined_product',
new_name='set',
),
]