我需要添加一個autoinc字段,即而不是的主鍵。我正在將使用自動增量字段的非常大的生產數據庫遷移到models.UUIDField
。我一直在做分段遷移,現在我的所有關係都與兩種字段類型重複。我已準備好進行主鍵交換,但不幸的是,我仍然需要爲舊客戶端保留自動遞增整數字段,因爲它已過時。如何在django中支持AutoField(primary_key = False)?
由於django不允許我使用primary_key=False
定義自動字段(儘管在db層完全支持這個),我在尋找一個簡單的解決方案。我最初的策略是簡單地將字段更改爲models.BigIntegerField('GUID', db_index=True, null=True, unique=True)
,然後使用migrations.RunSQL
手動設置默認nextval('my_guid_seq'::regclass)
。迄今爲止很好,除非沒有。事實證明,由於我的null=True
聲明,ORM層的django正在接管並插入null
,這將不允許數據庫層的默認設置執行它的工作。
核心開發人員很快就拒絕這個請求,因爲設計不好,我最明確地同意這一點,但是這裏有非常有效的用例。 https://code.djangoproject.com/ticket/8576
我是一個非常薄弱的django開發者,所以我不想在ORM層獲得雜草元編程。這是根據定義的黑客,所以我正在尋找最複雜,創造性的解決方案,讓我圍繞此限制
看起來從 'my_guid_seq' ::您正在使用PostgreSQL,你可以使用編輯遷移postgreql序列regclass的。但如果你更新你的問題並提出你的真正目標,你可以得到一個更好的答案。 – e4c5
@ e4c5我有點害怕標記postgres,因爲那部分工作得很好,我不想分散postgres社區。不幸的是,我的問題在於django的ORM一直在堆棧中。 –
對,如果你能解釋這個excercise的目標,我們可能會找到一種方法 – e4c5