2017-06-07 9 views
1

私はDjangoで約1週間働いていますので、以下のことはあまり気にしません。モデルとポストグレスデータベースのフィールドのシーケンスを自動的に作成する必要があります。 1000,1001,1002など...1000から始まる自動インクリメントnon-pkフィールド

私が研究しているものから私はsave関数を拡張し、dbの以前の値をチェックする必要があります。

最終的な結果は、このモデルを使用してAPIに投稿でき、このフィールドは上記のように増分されます。私がこれまでに研究している私は、保存機能を拡張し、DB内の前の値をチェックする必要があるでしょうから、

class MyModel(AuditMixin, models.Model): 
    order_number = models.IntegerField(blank=False) 

    def get_number(self): 
     return ??? 

    def save(self): 
     ??? .save() 
+0

申し訳ありませんが、ルックアップ、私は実際には非常に似何かをしました。あなたが説明したように、シーケンスを作成して手動で移行しました。 – user2168066

+0

お手数ですが、マイグレーションに追加することをおすすめします。そのプロセスは再現性があります。また、あなたのテストはうまくいかないかもしれません。 – e4c5

答えて

0

通常、SELECTを実行した後にそのSELECTに基づいて挿入または更新を行うと、どのRDBMSでも悪い考えです。これは競合状態につながり、データベースにはこの競合状態を回避し、通常はより高速なメカニズムが組み込まれているためです。

PostgresqlにはSerialタイプがあります。これはDjangoの次のメジャーリリースのdjango.contrib.posgresに含まれていますが、現在はこれが対象となります。このようなカスタム移行を作成します:あなたが前にカスタム移行を作成したことがない場合

CREATE SEQUENCE my_serial START 1000; 
ALTER TABLE myapp_mymodel ALTER COLUMN order_number SET DEFAULT nextval('my_serial'); 

、遅延のためRunPython

関連する問題