从旧模块中删除依赖于自定义字段的 Django 迁移

Posted

技术标签:

【中文标题】从旧模块中删除依赖于自定义字段的 Django 迁移【英文标题】:Removing a Django migration that depends on custom field from an old module 【发布时间】:2016-05-07 22:00:50 【问题描述】:

我有一个 Django 1.8 应用程序,其初始迁移依赖于 django-interval-field,如下所示:

import interval.fields

migrations.CreateModel(
    name='Item',
    fields=[
        ...
        ('estimated_time', interval.fields.IntervalField(null=True, blank=True)),

我已经迁移这个字段以使用 Django 的内置 DurationField,我不再使用这个模块,但我需要将它保存在 requirements.txt 中以便我的迁移运行。

但是,在尝试升级到 Django 1.9 时,此模块会引发错误。此外,我不能永远保留这个模块。摆脱它会很好。

我已尝试压缩迁移,但压缩后的迁移仍包含 import interval.fields 语句,并创建了间隔字段。压缩所做的就是将所有内容连接到一个文件中。

谁能告诉我如何继续删除这个模块?

有问题的 Django 应用程序是 here。

【问题讨论】:

【参考方案1】:

所以,你的挤压不是真正的挤压

    requirements.txt 中删除此包 从您的models.py 中删除import interval.fields 将您的interval.fields.IntervalField(xxx) 修改为相关my_app_label/migrations/1234_some_migrations.py 中Django 中可用的某些类型 完成

【讨论】:

【参考方案2】:

在所有迁移文件中找到interval.fields.IntervalField 的所有声明(对于有问题的模型字段)并替换为IntegerField

只要您在迁移过程中没有使用Interval字段的数据迁移,就可以了。

【讨论】:

以上是关于从旧模块中删除依赖于自定义字段的 Django 迁移的主要内容,如果未能解决你的问题,请参考以下文章

Django第三天

springboot中关于自定义注解校验

Django自定义模型(model)中的字段标签

恢复 Django 1.7 RemoveField 迁移

从 django-allauth 中删除“用户名”字段

从自定义 Django 用户模型中删除密码