Django4.0 遷移-刪除模型字段時的注意事項(xiàng)

2022-03-16 17:50 更新

如果在舊遷移中引用了自定義模型字段,則從項(xiàng)目或第三方應(yīng)用中刪除這些字段將導(dǎo)致問題。

為了解決這種情況,Django 提供了一些模型字段屬性,使用 系統(tǒng)檢查框架 來協(xié)助棄用模型字段。

將 ?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 ?并更新類似于以下內(nèi)容的字典:

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.
    }

你應(yīng)該保留該字段在數(shù)據(jù)庫遷移中操作所需的方法,如 ?__init__()?,?deconstruct()?和 ?get_internal_type()?。只要任何引用該字段的遷移存在,就保留這個存根字段。例如,在壓縮遷移并刪除舊的遷移后,你應(yīng)該可以完全刪除該字段。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號