新的記錄,我有以下型號Django的創造,而不是更新
class FooBar(models.Model):
FOOBAR_ID = models.AutoField(primary_key=True)
foo = models.CharField(max_length=255)
bar = models.CharField(max_length=255)
此外,我創建了一個表格,讓我編輯FooBar的現有實例。我想在更改foo時更新現有記錄,但在更改欄時創建新記錄。
我想出一個好辦法去將覆蓋保存方法,因爲它會避免做一些額外的查詢數據庫,這是我通過添加下面我FooBar的模型來完成。
__original_bar = None
def __init__(self, *args, **kwargs):
super(FooBar, self).__init__(*args, **kwargs)
self.__original_bar = self.bar
def save(self, force_insert=False, Force_update=False, *args, **kwargs):
if self.bar != self.__original_bar:
super(FooBar, self).save(force_insert=True, force_update=False, *args, **kwargs)
self.__original_bar= self.bar
else:
super(FooBar, self).save(force_insert=False, force_update=True, *args, **kwargs)
當我更新富一切正常,但是當我更新欄顯示以下錯誤:
密鑰( 「FOOBAR_ID」)=(2)已存在。
我顯然是完全錯誤的force_insert做什麼。我如何強制它在保存中創建新記錄?