具有Django treebeard MP_Node T的对象的多个版本(修订版)

2024-04-28 20:57:36 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我正在尝试实现(恢复)对象(Post)编辑,它允许查看已编辑对象的所有以前的修订。在

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

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


Tags: 对象djangohttpsorg路径src编辑bitbucket
1条回答
网友
1楼 · 发布于 2024-04-28 20:57:36

毕竟,我已经用model子类化(这意味着几乎重复的表结构)、基本抽象模型(包含主数据)、MP_Tree子类模型(树结构中有最新版本)实现了它,其中previous是指向旧版本的模型的链接,而“previous”指向self。此外,我还使用此函数将对象从树模型“移动”到基础模型中:

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

可能会做得更好。在

相关问题 更多 >