为django应用程序创建自定义pgsql类型的正确方法是什么,以便每次使用syncdb创建数据库时,在创建任何表之前创建所有自定义类型(以便表可以使用此类型)?
我也使用了django-evolution,但这不是一个合适的解决方案-它在syncdb之后运行。我可以想象这样的变通方法,比如使用标准字段类型定义模型,然后在演进中创建类型和更改列类型,但这肯定不是很好,而且有点晦涩……
有什么想法吗?
发布于 2009-06-29 06:50:01
我不相信在Django有办法做到这一点。正如您可能知道的,有一个post_syncdb信号,但没有pre_syncdb的信号。
所以我认为只有两个选择:在Django中使用pre_syncdb信号或者使用像Fabric这样的自动化工具。
破解你自己的pre_syncdb信号,即使这是正确的方法,可能也不会很简单,你必须在每个新的Django版本中维护补丁。
另一方面,像Fabric这样的自动化工具不仅简单,而且还为您的项目提供了其他好处。
例如,我的Fabfile的一部分如下所示:
def createdb():
"Create a clean database"
run('createdb --encoding=UNICODE $(db_name) -O $(db_owner) -U $(db_owner)')
run('python manage.py syncdb --noinput')在syncdb之前添加如下内容:
run('psql -U $(db_owner) $(db_name) < app/sql/custom_types.sql')您只需输入以下命令即可:
$ fab createdb或者:
$ fab cluster createdb在您的环境中列出的所有计算机上运行名为cluster的命令。
https://stackoverflow.com/questions/1056535
复制相似问题