1

マテリアライズド パス ツリー (django-treebeard 提供) を使用してツリー構造 ( https://bitbucket.org/hoverhell/xmppforum/src/27207da4a061/snapboard/models.py#cl-363 ) を作成しています。

編集されたオブジェクトの以前のすべてのリビジョンを表示できるオブジェクト (ポスト) 編集を実装 (回復) しようとしています。

質問は、すべての古いリビジョンをどこに保存するのがよいでしょうか?

今のところ、私には 2 つのアイデアがあります — 1. それらを Post モードのツリーの特別な場所に保存するか、または 2. 保存する MP_Node Post オブジェクトを (何らかの方法で) 与えることができる古いリビジョンの追加モデルを実装します (以前のリビジョンを保持します)。改訂も)。しかし、どちらのアイデアもあまり良くありません。別の未完成のアイデアは、ツリーとデータ構造を別々に保持する (ツリーからデータを参照する) ことです。しかし、それもかなり問題になると強く思います。

4

1 に答える 1

1

結局のところ、モデルのサブクラス化 (ほとんど重複したテーブル構造を意味する)、基本抽象モデル (プライマリ データを含む)、MP_Tree サブクラス モデル (ツリー構造の最新バージョン) を使用して実装し、「前の」リンクを使用しました。自分自身を指す「前の」を持つ古いリビジョンでモデル化します。さらに、この関数を使用して、オブジェクトをツリー モデルからベース モデルに「移動」しました。

@classmethod
def make_from_post(cls, post):
    """ Create an object from another object, possibly of a slightly
    different class (like tree Post).  """
    data = {}
    for field in cls._meta.fields:
        if field.primary_key:
            continue
        # Assuming that all default fields for cls are None and thus
        # skipping 'None's from attribute values.
        attrdata = getattr(post, field.name, None)
        if attrdata is not None:
            data[field.name] = attrdata
    return cls(**data)

これはおそらくもっとうまくできるでしょう。

于 2011-02-13T06:39:01.610 に答える