かなり可能。まず、モデルを変更して、標準の AutoField を主キーとして使用しないようにします。
class MyModel(models.Model):
id = models.IntegerField(primary_key=True)
次に、postgresql に接続して、2 つの異なるシーケンスを作成する必要があります。
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)
save メソッドをオーバーライドする代わりに、postgresql BEFORE INSERT トリガーを作成することもできます。nextval を取得するための往復はそれほどコストがかかりませんが、これが懸念される場合は、トリガーを作成することを選択できます。その場合、save メソッドをオーバーライドする必要はありませんが、トリガー内に同じロジックを実装する必要があります。