Django4 中文入门教程 Django4.0 迁移-删除模型字段时的注意事项

2024-02-25 开发教程 Django4 中文入门教程 匿名 3

如果在旧迁移中引用了自定义模型字段,则从项目或第三方应用中删除这些字段将导致问题。

为了解决这种情况,Django 提供了一些模型字段属性,使用 系统检查框架 来协助弃用模型字段。

将 ​system_check_deprecated_details ​属性添加到你的模型字段中,类似于:

class IPAddressField(Field):
system_check_deprecated_details = {
'msg': (
'IPAddressField has been deprecated. Support for it (except '
'in historical migrations) will be removed in Django 1.9.'
),
'hint': 'Use GenericIPAddressField instead.', # optional
'id': 'fields.W900', # pick a unique ID for your field.
}

在你选择的弃用期(Django 本身的字段有两个或三个功能版本)之后,将 ​system_check_deprecated_details ​属性改为 ​system_check_removed_details ​并更新类似于以下内容的字典:

class IPAddressField(Field):
system_check_removed_details = {
'msg': (
'IPAddressField has been removed except for support in '
'historical migrations.'
),
'hint': 'Use GenericIPAddressField instead.',
'id': 'fields.E900', # pick a unique ID for your field.
}

你应该保留该字段在数据库迁移中操作所需的方法,如 ​__init__()​,​deconstruct()​和 ​get_internal_type()​。只要任何引用该字段的迁移存在,就保留这个存根字段。例如,在压缩迁移并删除旧的迁移后,你应该可以完全删除该字段。