かなり可能です。まず最初は、それが主キー
class MyModel(models.Model):
id = models.IntegerField(primary_key=True)
として標準のAutoFieldを使用しないようにモデルを変更することです次に、あなたは、PostgreSQLに接続して、二つの異なるシーケンスを作成する必要があります。
CREATE SEQUENCE small START 1;
CREATE SEQUENCE big START 32768;
代わりPSQLコンソールにそれを入力して、あなたはまた、これらを作成作成するために、Djangoの移行(RUNSQLディレクティブを使用して)を編集考えるかもしれません。
次のステップは、保存メソッドをオーバーライドするメソッドを保存
def save(self,*args, **kwargs)
if not self.id :
cursor = connection.cursor()
if small condition:
cursor.execute("select nextval('small')")
else:
cursor.execute("select nextval('big')")
self.id = cursor.fetchone()[0]
super(MyModel,self).save(*args,**kwargs)
代替がINSERTトリガ以前のPostgreSQLを作成することでオーバーライドすることです。 nextvalを取得するための往復は非常に高価ではありませんが、トリガーを作成することが懸念される場合は、選択するオプションがあります。その場合、saveメソッドを乗り越える必要はありませんが、トリガー内に同じロジックを実装する必要があります。