Предыдущая версия объекта, управляемого джанго-реверсией - PullRequest
1 голос
/ 31 января 2012

Я использую то, что в документах django-reversion называется низкоуровневым API , чтобы получить доступ к истории возврата в моем собственном коде, кроме администратора. Для хранения метаданных я расширил модель Revision, настроив свою собственную модель, включая OneToOneField(Revision). Пока все хорошо.

Но, учитывая эту ссылку на Revision, как я могу получить доступ к ревизии напрямую до этого? Например, чтобы сгенерировать список изменений между этой ревизией и предыдущей, есть ли более эффективный метод, чем обратный вызов reversion.get_for_object и поиск в списке нужной версии?

Ответы [ 2 ]

5 голосов
/ 31 января 2012

Объект Revision имеет атрибут date_created, поэтому вы можете написать запрос, чтобы выбрать одну самую последнюю ревизию для вашего объекта до date_created данной ревизии.Я бы просто скопировал реализацию низкоуровневой 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 голосов
/ 12 ноября 2014

Объекты версий имеют атрибут ревизии, который имеет два метода: «get_next_by_date_created» и «get_previous_by_date_created», которые можно использовать для просмотра истории версий в любом случае.

version.revision.get_previous_by_date_created()
...