2017-09-05 54 views
1

目前,我有一個ItemReport表的Django項目,每個項目每天只允許輸入1個條目。一切都很好,所有不同的是,每當它失敗的IntegrityError(即我的項目嘗試在每天創建ItemReportItemReport已經存在,對象ID增量反正如何阻止創建失敗時自動遞增表ID的Django/PSQL

例如:

September 1: 
Report for September 1 (ID 1) 

September 2: 
Report for September 1 (ID 1) 
Report for September 2 (ID 5) 

模型如下:

:即得到每次運行用戶登錄的代碼

class ItemReport(BaseModel): 
    fk_item: Item = models.ForeignKey(Item, null=False) 
    date = models.DateField(default=now, null=False) 

    class Meta: 
     unique_together=(('fk_item', 'date'),) 


class Item(BaseModel): 
    item_class = models.CharField(max_length=40, null=False) 
    name = models.CharField(max_length=80, unique=True, null=False) 

+3

不要依賴於任何特定值的ID。它們應該與您的業務邏輯完全無關。 –

+1

所以你說在邏輯中使用ID是不好的做法?我打算將它們用作確保表在服務器之間正確同步的手段。如果不是通過身份證,那麼有更好的方式來做到這一點的任何想法? – Dilisqq

回答

1

如果pk是自動增量字段,則不能這樣做。當您嘗試創建新對象時,數據庫會獲取值表單序列。並且序列不支持回滾,因爲當許多用戶同時插入新行時,只有一個被中止,對於重建序列,您需要在數據庫內進行許多硬操作。

希望它能幫助你。

+0

我明白了。我不知道這是如此。所以如果我理解正確,將字段設置爲非自動增量可以解決問題? – Dilisqq

+0

我認爲你需要額外的領域的邏輯,將不會自動增量 –

+0

谷歌「無縫序列postgres」 –