2015-06-09 1 views
0

У меня было две модели CombinedProduct и CombinedProductPrice, которые я переименовал в Set и SetPrice соответственно. Я сделал это, изменив имя модели в файле models.py и заменив все ее вхождения. Это также включало переименование поля foreignkey в другой модели из comb_product в set (указывающее на CombinedProduct).Stale content type prompt удаление всех экземпляров модели после переименования модели django с разрешениями

При запуске makemigrations django правильно обнаружил переименование и спросил, переименовал ли я все три из этих вещей, и я нажал «да» для всех. Однако при запуске «мигрируют», после применения некоторых вещей, меня спрашивают:

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). Если я откатываюсь назад и тикаю нет, тогда этот вопрос возникает каждый раз, когда я переношу.

Это странно, так как я нигде не использую никакую структуру ContentType django. При проверке, какие поля указывают на 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', 
    ), 
] 

ответ

1

Если вы хотите переименовать таблицу, пожалуйста, обратите внимание на RenameModel. Да, Django не обнаруживает переименованную модель. Итак, вам нужно добавить его вручную.

+0

Django действительно автоматически обнаружил переименованную модель. См. Мое редактирование о миграции, которая была создана. И хотя он использует RenameModel, у меня все еще есть эта проблема. – Tobias

Смежные вопросы