2012-01-31 6 views
1

adminから離れて自分のコードで復帰履歴にアクセスするために、django-reversionのドキュメントがlow-level APIと呼ばれるものを使用しています。メタデータを保存するには、OneToOneField(Revision)を含む自分のモデルを設定してRevisionモデルを拡張しました。ここまでは順調ですね。django-reversionで制御されたオブジェクトの以前のバージョン

Revisionへの参照がある場合、の直前にのリビジョンにアクセスするにはどうすればよいですか?たとえば、このリビジョンと前のリビジョンとの間の変更リストを生成するには、reversion.get_for_objectに戻り、リストで探しているバージョンを検索するより効率的な方法がありますか?

答えて

5

リビジョンオブジェクトにはdate_createdという属性があるため、特定のリビジョンのdate_createdより前にオブジェクトの最新リビジョンを1つ選択するクエリを作成できます。私は1回の変更で、低レベルAPIのget_for_date関数の実装を基本的にコピーしたい - "date_created__lt"の代わり"__lte"を使用します。

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の場合はNoneを返します。 –

0

バージョンオブジェクトは二つの方法、「get_next_by_date_created」がリビジョン属性を、持っています、と 'get_previous_by_date_created'のいずれかの方法でバージョン履歴をトラバースすることができます。

version.revision.get_previous_by_date_created() 
関連する問題