Django + Postgres:如何指定字段的序列

时间:2010-03-25 14:11:31

标签: django postgresql django-models sequences

我在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的哪个序列?在我阅读的文档中,我无法找到答案。

2 个答案:

答案 0 :(得分:1)

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

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

编辑:

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

答案 1 :(得分:1)

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结果),但这是一件好事,对性能也有好处。