Djangoでは、Postオブジェクトに関連付けられた画像への同時変更をどのように処理しますか?
これは以前に尋ねられた質問の傾向ですが、同じ問題を完全にはカバーしていません。これら ( question、question、question、およびquestion ) を読みましたが、問題は少し異なります。
タイトル、要約、本文、および関連する画像を含むブログ投稿モデル (速度のための擬似コード) があります。
class Post(models.Model):
title = CharField
abstract = TextField
body = TextField
class Image(models.Model):
post = ForeignKey(Post)
imagefile = ImageField
ここで追加したいのは、このPost
モデルへの変更履歴を保存する機能です。これについては、次の 2 つの可能性を考えました。
可能性 1
class PostHistory(models.Model):
post = ForeignKey(Post)
title_delta = TextField
abstract_delta = TextField
body_delta = TextField
ただし、これには、変更のないデルタを格納しているという問題があります (たとえば、title
が変更されず、フィールドのデルタしかない場合などbody
です。つまり、複数のフィールドが変更された場合、'1 リビジョン == 1 完全に適合します)。リビジョン'。
可能性 2
class PostRevision(models.Model):
post = ForeignKey(Post)
field = CharField #Field name
delta = TextField
2 つの異なるアプローチにより、これはフィールドの diff の履歴を正常に取得します。これは、 diff-match-patchを使用して生成します (組み込みのdifflibよりもわずかにパフォーマンスが優れています)。私が現在抱えている 2 つの問題は、マスター オブジェクトの生成 (つまり、チェーンの最上位のリビジョン) に関連しています。
問題は、投稿オブジェクトに関連付けられた画像への同時変更をどのように処理するかということです。これらはbody
、モデルのフィールド内の参照を介して変更されます (これは、画像フィールドの URL 参照を追加するためにフォームPost
上で編集される Markdown 形式のテキスト フィールドです)。POST
これに対処する最善の方法は、リビジョンとPost
オブジェクトで M2M フィールドを使用して、画像を常にPostRevision
オブジェクトと共に保存できるようにすることですか?