3

私は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) では、接続されているシーケンスの名前がDjango の期待どおりでjidはなく、別の名前になっていることです。journals_general_jid_seq

Django が に使用しなければならないシーケンスを指定する方法はありますAutoFieldか? 私が読んだドキュメントでは、答えを見つけることができませんでした。

4

2 に答える 2

2

私はそうは思いませんが、そのためのチケットが公開されています (おそらく役立つパッチが付属していますか?):

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

編集:

実際、上記のリンクには、スレッドに関する HM からのコメントがあり、パッチ自体よりも優れた解決策があります。パッチは古いため、使用している Django のバージョンに適用できるかどうかはわかりません。

于 2010-03-25T14:23:08.900 に答える
1

Django のこのパッチはどうですか: http://code.djangoproject.com/ticket/8901 ? そして、シーケンスの名前が本当に必要ですか? バージョン 8.2 の時点で、PostgreSQL には、作成された ID を取得するために使用できる INSERT (および UPDATE と DELETE) で使用できる RETURNING があります。

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

Django がこれ (INSERT の結果を取得する) を処理できるかどうかはわかりませんが、これは素晴らしいことであり、パフォーマンスにも優れています。

于 2010-03-25T14:28:14.040 に答える