私のDjangoアプリケーションでは、すべてのオブジェクトの完全な編集履歴を保存することを検討しています。その一環として、私はモデルのsave()メソッド、以下に示しているの一部上書きしました:保存前にオブジェクトの初期状態のコピーを作成する
# Replicate the current version (from the db) with all attributes unchanged
new_ver = self.__class__.objects.get(pk=self.pk).save(force_insert=True)
# Update the current version in the database with the new attributes
super(CodexBaseClass, self).save(*args, force_update=True, **kwargs)
を保存()メソッドに渡されたの「自己」のオブジェクトのNEWバージョンですフォームによって生成されました。このコードが実行しようとしているのは
(1)データベースに現在表示されているオブジェクトのコピーを作成します(つまり、フォームが変更される前にデータをコピーしてから)データが新しい行としてコピーされるようにします。
(2)フォームを使用して送信されたオブジェクトの新しいバージョンで既存の行を更新します。
問題は2行のコードの最初の行にあります - DoesNotExist例外を生成します。オブジェクトが存在するので、現在読んでいるデータベース行が現在ロックされているという問題があると考えています。
私の質問は次のとおりです。最初の行を修正/置き換えて、の最初のデータのコピーをフォームに変更する方法がありますか?
ありがとうございました。
私はそれを正確に試しました。同じ例外があります。 自己。__class __。objects.get(pk = self.pk) は問題と思われる部分です。 self.pkによって参照されるオブジェクトは、UpdateViewによって編集されているオブジェクトなので、この時点でデータベースからその特定のオブジェクトを読み取ることができないようです...少なくともこのメソッドはありません。 – Ben
あなたは私の答えを試しましたか? – e4c5