2

追跡するモデルにリンクする一般的な関係を持つモデル TrackedItem を取得しました。

私がそれを行う場合:

t = TrackedItem(content_object=MyModel)
t.save()
t.save()

私は得る:

IntegrityError: (1062, "Duplicate entry '1' for key 'PRIMARY'")

確かに、最初の保存では、PK として「1」を持つエントリが作成されました。ただし、2 回目の保存は挿入ではなく、更新する必要があります。

2 回保存できないモデルを更新するにはどうすればよいですか?

普通のモデルならいくらでも節約できます。

編集:一般的な関係とはまったく関係がない場合があります。

オーバーライドされた保存があり、この方法で super を呼び出します:

super(TrackedItem, self).save(self, *args, **kwargs)

このようにすると、うまくいきます:

model.Model.save(self, *args, **kwargs)
4

2 に答える 2

5

あなたの問題は、「スーパー」の間違った使用が原因である可能性が最も高いです。次のようになります。

super(TrackedItem, self).save(*args, **kwargs)
于 2010-04-29T10:19:04.333 に答える
0

これは DB トランザクションの問題だと思います。2 つの保存呼び出しの間にDB コミットはありますか? ビューが transaction.commit_on_sucess 制御下にある可能性があります。

2 つの可能性:

  transaction.commit() # within transaction.commit_manually

また

  t.save(force_update=True) # 2nd save call
于 2010-04-29T09:31:31.587 に答える