2011-02-02 1 views
1

트리 구조 (https://bitbucket.org/hoverhell/xmppforum/src/27207da4a061/snapboard/models.py#cl-363)를 만들기 위해 Materialized Path 트리 (django-treebeard에서 제공)를 사용하고 있습니다.django treebeard가있는 여러 버전의 객체 (리비전) MP_Node 트리

편집 된 개체의 이전 버전을 모두 볼 수있는 개체 (게시) 편집을 구현하려고합니다.

질문 : 이전 버전을 모두 저장하는 것이 더 나은 점은 어디에 있습니까?

이제는 두 가지 아이디어가 있습니다. 1. Post 모드 트리의 특정 위치에 저장하거나 2. (어떤 방법 으로든) MP_Node Post 객체를 저장할 수있는 이전 버전의 추가 모델 구현 (이전 개정판 유지). 그러나 두 가지 아이디어는별로 좋지 않습니다. 또 다른 미완성 된 아이디어는 트리와 데이터 구조를 별도로 유지하는 것입니다 (트리의 데이터 참조). 그러나 나는 그것이 또한 상당히 문제가 될 것이라는 것을 강하게 의심한다.

답변

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) 

합니다.