【问题标题】:Right way to create custom pgsql types in django在 django 中创建自定义 pgsql 类型的正确方法
【发布时间】:2010-11-06 14:12:16
【问题描述】:

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

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

有什么想法吗?

【问题讨论】:

    标签: database django postgresql django-syncdb django-evolution


    【解决方案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 的机器上运行该命令。

    【讨论】:

    • 是的,我想过破解 pre_syncdb — 实际上我可以将它作为补丁提交。我也在为 django 使用我自己的 git repo,所以我可以毫无问题地维护我的补丁集,直到它们成为主流......我只是想可能有任何其他方式,但显然没有...... pre_syncdb 看起来很自然,所以我可能会去。
    • 好吧,我不是 Django 开发人员,所以我的回答不能是权威的。他们没有 pre_syncdb 信号可能有充分的理由,并且可能有另一种方法可以做到这一点。在进行任何编码之前,我会在 django-dev 邮件列表上提出问题。
    猜你喜欢
    • 2014-02-14
    • 2021-02-05
    • 2014-04-16
    • 2015-02-11
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多