我们有一个带有自定义 Django 字段的虚拟 Python 模块 (fields.py),它根据配置的数据库加载实际实现:
if settings.DATABASES['default']['ENGINE'].find('postgresql') != -1:
from fields_postgresql import *
else:
from fields_dummy import *
这样做的原因是我们正在使用 PostgreSQL ip4r 扩展,它允许很好(和快速)地处理包含 IP 值的字段。但我们也有其他数据库的虚拟实现(用 Python 代码),因此开发也可以在 SQLite 中完成。因此,如果您使用的是 PostgreSQL,则这些字段会使用使用 ip4r 索引的字段进行备份,如果您使用的是其他数据库系统,则这些字段是常规字段。
问题是如何在这样的领域使用南迁。问题是 add_introspection_rules 发现了 fields_postgresql 和 fields_dummy 所以这会泄漏到迁移。如果您想在 PostgreSQL 的安装上应用使用 SQLite 进行的迁移,这就是稍后的问题。
如何才能让 South 相信这只是 fields 模块,而与运行哪个具体实现迁移无关紧要。
请您参考如下方法:
停止对 SQLite 的支持。
你是对的,如果你不是在手机上运行你的开发环境,仅仅为了不安装 Postgre 而维护你自己的基于南方的迁移脚本可能不值得这么麻烦。
Postgre 安装与维护自定义迁移代码是一次性操作,与连续且可能耗时的过程相比(因为您可能必须修改自定义迁移代码才能与较新的 South 版本同步)。
