【问题标题】:Django + Postgres: How to specify sequence for a fieldDjango + Postgres:如何为字段指定序列
【发布时间】:2010-03-25 14:11:30
【问题描述】:

我在 django 中有这个模型:

class JournalsGeneral(models.Model):
    jid = models.AutoField(primary_key=True)
    code = models.CharField("Code", max_length=50)
    name = models.CharField("Name", max_length=2000)
    url = models.URLField("Journal Web Site", max_length=2000, blank=True)
    online = models.BooleanField("Online?")
    active = models.BooleanField("Active?")
    class Meta:
        db_table = u'journals_general'
        verbose_name = "Journal General"
        ordering = ['code']
    def __unicode__(self):
        return self.name

我的问题是,在 DB (Postgres) 中,连接到 jid 的序列的名称不是 Django 所期望的 journals_general_jid_seq,但它具有不同的名称。

有没有办法指定 Django 必须为AutoField 使用哪个序列?在我阅读的文档中,我找不到答案。

【问题讨论】:

    标签: django postgresql django-models sequences


    【解决方案1】:

    我不这么认为,但有一张票可以打开(可能有一个有用的补丁?):

    http://code.djangoproject.com/ticket/1946

    编辑:

    实际上,上面的链接有一个来自 HM 的评论,它提供了比补丁本身更好的解决方案。补丁很旧,我不确定它是否适用于你正在使用的 Django 版本。

    【讨论】:

    • 为什么他们要写补丁而不是重写函数?
    • 抱歉,我找不到应用这个补丁的地方...在我看来这些文件已经不存在了...
    • @Giovanni:他们不是在编写补丁——有人像你一样注意到了这个问题并贡献了一个补丁。补丁 - 或替代品 - 可能最终会在某个时候出现在项目的主干中(或者不是,某些补丁永远不会被认为值得)。补丁在那里,使用这个链接:code.djangoproject.com/attachment/ticket/1946/source-patch 并使用底部的下载链接。您需要使用patch 来应用它。如果您在使用patch 时需要帮助,这篇博文可能会有所帮助:stephenjungels.com/jungels.net/articles/…
    • 6 年后,在 django 中仍然没有解决这个问题。
    【解决方案2】:

    Django 中的这个补丁:http://code.djangoproject.com/ticket/8901 怎么样?你真的需要序列的名称吗?从 8.2 版开始,PostgreSQL 具有 RETURNING,您可以在 INSERT(以及 UPDATE 和 DELETE)中使用它来获取创建的 id:

    INSERT INTO foo(bar) VALUES('John') RETURNING id;
    

    我不知道 Django 是否可以处理这个问题(获取 INSERT 结果),但这是一件好事,对性能也有好处。

    【讨论】:

    • 这没有回答问题,我也看不出这有什么关系。
    猜你喜欢
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 2010-10-30
    相关资源
    最近更新 更多