@nurzhannogerbek

Готовые решения по контролю версий модели данных?

Здравствуйте! Нужен совет.

Есть некая модель данных и задача заключается в том, чтобы хранить всю информацию об изменениях (некий контроль версий) и в случаи необходимости откатиться в определенную версию. Убежден, что подобные задачи уже решались. Могли бы вы посоветовать проекты, готовые приложения или ссылки на статьи по данной тематике.

Сам я на гибхабе нашел два проекта django-simple-history (https://github.com/treyhunner/django-simple-history) и django-reversion (https://github.com/etianen/django-reversion), но проблема в том там все адаптировано для вывода в админку. Когда как мне необходимо вывести историю версий изменений на скажем так custom page.
  • Вопрос задан
  • 435 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
В django-reversion вести учёт изменений и управлять ими можно и не в админке. Пример добавления объекта в базу вместе с начальной версией:
@require_POST
@login_required
@transaction.atomic()
@reversion.create_revision()
def add_something(request):
    form = SomeModelForm(request.POST)
    if form.is_valid():
        instance = form.save()
        reversion.set_user(request.user)
        reversion.set_comment(u'Что-то добавлено')
        return redirect(instance)
    else:
        return render(request, 'form.html', {'form': form})

Полностью аналогично изменение и удаление.

Если надо получить список ревизий объекта:
versions = Version.objects.get_for_object(instance)
for n, version in enumerate(versions, start=1):
    print(u'В версии №{} от {}'.format(n, version.revision.date_created))
    for field_name, field_value in version.field_dict.items():
        print(u'поле "{}" имело значение "{}"'.format(field_name, field_value))
    print()

И если надо откатиться к какой-либо версии, например к начальной:
versions = Version.objects.get_for_object(instance)
versions[0].revision.revert()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы