2015-06-09 85 views
0

我有兩個名爲CombinedProduct和CombinedProductPrice的模型,我分別重命名爲Set和SetPrice。我通過更改models.py文件中的模型名稱並替換了所有的模型名稱來完成此操作。這還包括將另一個模型中的foreignkey字段從combined_product重命名爲set(指向CombinedProduct)。陳舊的內容類型提示在權限重命名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'. 

我支持我的數據,進入「是」該刪除集(以前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', 
    ), 
] 

回答

1

如果要重命名錶,請大家看看RenameModel。是的,Django不檢測重命名的模型。所以,你需要手動添加它。

+0

Django確實可以自動檢測重命名的模型。查看我創建的遷移的編輯。即使它使用RenameModel,我仍然有這個問題。 – Tobias