我正在使用物化路径树(由django-treebeard提供)来创建树结构(https://bitbucket.org/hoverhell/xmppforum/src/27207da4a061/snapboard/models.py#cl-363)。
我正在尝试实现(恢复)对象(Post)编辑,该编辑允许查看已编辑对象的所有先前版本。
问题是,哪里存储所有旧版本会更好?
到目前为止,我有两个想法 - 1.将它们存储在Post模式树中的某个特殊位置,或2.为旧版本实现一个额外的模型,可以(某种方式)获得要存储的MP_Node Post对象(保留以前的修订版)。但这两种想法看起来都不太好。另一个未完成的想法是分别保留树和数据结构(引用树中的数据)。但我强烈怀疑它也会有问题。
答案 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)
可能会做得更好。