我有兩個名爲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',
),
]
Django確實可以自動檢測重命名的模型。查看我創建的遷移的編輯。即使它使用RenameModel,我仍然有這個問題。 – Tobias