2012-01-31 2 views
1

나는 장고 - 복귀 문서가 low-level API이라고 부르는 것을 사용하여 관리자와 별도로 내 코드의 복귀 기록에 액세스합니다. 메타 데이터를 저장하기 위해 OneToOneField(Revision)을 포함한 내 모델을 설정하여 Revision 모델을 확장했습니다. 여태까지는 그런대로 잘됐다.장고 - 복귀 제어 객체의 이전 버전

Revision에 대한 참조를 통해 에 직접 액세스하여에 액세스하려면 어떻게해야합니까? 예를 들어,이 개정판과 이전 개정판 간의 변경 목록을 생성하려면 reversion.get_for_object으로 다시 호출하고 찾고있는 버전 목록을 검색하는 것보다 효율적인 방법이 있습니까?

답변

5

Revision 객체는 date_created 속성을 가지고 있으므로 주어진 개정판의 date_created 이전에 가장 최근의 단일 개정판을 선택하는 쿼리를 작성할 수 있습니다. 나는 기본적으로 하나의 변화, 낮은 수준의 API의 get_for_date 기능의 구현을 복사 할 것 - "date_created__lt" 대신 "__lte"의 사용 버전의 객체가 개정 속성, 두 가지 방법이있는 'get_next_by_date_created을'이

def get_previous(object, date): 
    """Returns the latest version of an object prior to the given date.""" 
    versions = reversion.get_for_object(object) 
    versions = versions.filter(revision__date_created__lt=date) 
    try: 
     version = versions[0] 
    except IndexError: 
     raise Version.DoesNotExist 
    else: 
     return version 
+0

try/except 블록없이'versions.filter (...). first()'로 줄이면됩니다. 처음에는 객체를 반환하거나 없으면 None을 반환합니다. –

0

, 및 'get_previous_by_date_created'를 사용하여 버전 기록을 탐색 할 수 있습니다.