を更新する新しいレコードを作成し、私は次のモデルに持って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が変更されたときに既存のレコードを更新したいが、barが変更されたときに新しいレコードを作成する。
メソッドをオーバーライドするのが良い方法を考え出しました。これは、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)
私がfooのすべてが正常に動作しますが、私はバーを更新すると、次のエラーが表示される更新:
キー( "FOOBAR_ID")=(2)既に存在しています。
私は明らかにforce_insertの機能を完全に間違っています。保存で新しいレコードを作成するにはどうしたらいいですか?