在使用权限

时间:2015-06-09 23:30:37

标签: django database-migration

我有两个名为CombinedProduct和CombinedProductPrice的模型,我分别将其重命名为Set和SetPrice。我这样做是通过在models.py文件中更改其模型名称并替换它的所有实例。这还包括将combination_product中的foreignkey字段重命名为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',
    ),  
] 

1 个答案:

答案 0 :(得分:1)

如果您想重命名表格,请查看RenameModel。是的,Django没有检测到重命名的模型。因此,您需要手动添加它。