В 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()