2011-02-02 5 views
1

私はツリー構造(https://bitbucket.org/hoverhell/xmppforum/src/27207da4a061/snapboard/models.py#cl-363)を作成するためにマテリアライズドパスツリー(django-treebeard提供)を使用しています。djangoツリービートのオブジェクトの複数のバージョン(リビジョン)MP_Nodeツリー

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

質問:以前のすべてのリビジョンを保存するのがよい場合はどこですか?

私は2つのアイデアを持っています: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) 

を。

関連する問題