6
併發操作的Django形式integrityerror我注意到,我不知道這是否是一個真正的問題還是我做一些錯誤的設計的事。的獨特領域
我有一個模型:
class A(Model):
name = CharField(unique=True, max_length=255)
並且鏈接到一個的ModelForm,這的ModelForm有clean_name()方法,即檢查該字段是在DB唯一的(忽視的事實是modelforms已經做默認情況下,我在這裏指定這個例子)。
在如果我做
o = form.save(commit=False)
# xyz
o.save()
和#xyz
我有另一個客戶端,插入用相同name
字段值的目的,o.save()
觸發Integrityerror例外,正確地防止重複記錄的視圖將被插入。
我想知道的是如何處理這些情況,我是否應該使用try/except塊來包裝o.save()
,然後在表單上填充錯誤字段以指定選擇另一個name
值?
這在某種程度上應該發生在每個人,一個常見的情況和解決方案是可怕的,所以我覺得我做的事情可怕的錯誤。
爲什麼你不只是做:O = form.save()?這樣下一個條目將不會通過表單驗證。 – cchristelis
@cchristelis在這種情況下#xyz會在form.is_valid()和form.save()之間。 – DRC
一種解決方法是先保存對象(如果某些必填字段在'xyz'計算使用虛擬值),並有一個名爲'calculating'一個布爾值字段,你設置爲TRUE;當你正在做'xyz'。當額外的工作完成後,您可以根據'xyz'的結果更新/刪除它,並將'calculate'設置爲False。儘管你的建議和我的建議都很駭人,但我們希望別人能提出一個更好的方法。 –