Django + Postgres: как указать последовательность для поля - PullRequest
2 голосов
/ 25 марта 2010

У меня есть эта модель в Джанго:

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

Моя проблема в том, что в БД (Postgres) имя последовательности, подключенной к jid, не journals_general_jid_seq, как ожидал Django, но у него другое имя.

Есть ли способ указать, какую последовательность Django должен использовать для AutoField? В документации, которую я прочитал, я не смог найти ответ.

Ответы [ 2 ]

1 голос
/ 25 марта 2010

А как насчет этого патча в Django: http://code.djangoproject.com/ticket/8901? И вам действительно нужно название последовательности? Начиная с версии 8.2, PostgreSQL имеет RETURNING, который вы можете использовать в INSERT (и UPDATE и DELETE), который можно использовать для получения созданного идентификатора:

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

Понятия не имею, справится ли Django с этим (извлекает INSERT-результат), но это хорошая вещь и хорошая производительность.

1 голос
/ 25 марта 2010

Я так не думаю, но для этого есть билет (возможно, с полезным патчем?):

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

Редактировать:

На самом деле, эта ссылка содержит комментарий от HM по теме с лучшим решением, чем сам патч. Патч старый, я не уверен, будет ли он применим к используемой вами версии Django.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...