1

为 django 应用程序创建自定义 pgsql 类型的正确方法是什么,以便每次使用 syncdb 创建数据库时,在创建任何表之前创建所有自定义类型(以便表可以使用这种类型)?

我也使用 django-evolution,但这不是一个合适的解决方案——它在 syncdb 之后运行。我可以想象做一个解决方法,比如定义具有标准字段类型的模型,然后在演变中创建类型和更改列类型,但这绝对不是很好而且有点晦涩......

任何的想法?

4

1 回答 1

1

我不相信在 Django 中有办法做到这一点。您可能知道,有post_syncdb信号但没有信号pre_syncdb

所以我认为只有两个选择:pre_syncdb将信号侵入 Django 或使用像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.

于 2009-06-29T06:50:00.793 回答