很可能。首先是要改變你的模型,以便它不使用標準的下拉列表AutoField作爲主鍵
class MyModel(models.Model):
id = models.IntegerField(primary_key=True)
然後,你需要連接到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)
替代重寫保存方法是創建一個PostgreSQL BEFORE INSERT觸發。去往nextval的往返不是很昂貴,但如果這是一個問題,創建觸發器是可以選擇的選項。在這種情況下,您不需要使用save方法,但是您必須在觸發器內部實現相同的邏輯。