具有django treebeard MP_Node树的对象的多个版本(修订版)

时间:2011-02-02 04:31:36

标签: python django django-treebeard

我正在使用物化路径树(由django-treebeard提供)来创建树结构(https://bitbucket.org/hoverhell/xmppforum/src/27207da4a061/snapboard/models.py#cl-363)。

我正在尝试实现(恢复)对象(Post)编辑,该编辑允许查看已编辑对象的所有先前版本。

问题是,哪里存储所有旧版本会更好?

到目前为止,我有两个想法 - 1.将它们存储在Post模式树中的某个特殊位置,或2.为旧版本实现一个额外的模型,可以(某种方式)获得要存储的MP_Node Post对象(保留以前的修订版)。但这两种想法看起来都不太好。另一个未完成的想法是分别保留树和数据结构(引用树中的数据)。但我强烈怀疑它也会有问题。

1 个答案:

答案 0 :(得分:1)

毕竟,我已经用模型子类化(这意味着几乎重复的表结构)实现了它,基本抽象模型(包含主要数据),MP_Tree子类模型(树结构中的最新版本)与'previous '作为旧版本的模型的链接,其中“先前”指向自我。另外,我使用此函数将对象从树模型“移动”到基本模型中:

@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)

可能会做得更好。