Masik
@Masik
Программирую понемногу

Как сохранить историю изменений в модели Django?

Для сохранения истории моделей пытаюсь подключить приложение django-reversion. Делаю по документации и если, сохранять из административного интерфейса, то все работает корректно, но из UpdateView никаких записей не производится. Использую Django==1.5.6 и django-reverion==1.7.1.
MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.middleware.transaction.TransactionMiddleware',
    'reversion.middleware.RevisionMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

Хотя, если я правильно понял из документации, мне должно быть достаточно только следующих строк:
models.py
# Регистрируем необходимые модели
for report in reports_list():
    reversion.register(report)

views.py
class ReportUpdate(UpdateView):
   ...
    def post(self, request, *args, **kwargs):
        response = super(ReportUpdate, self).post(request, *args, **kwargs)
        self.object = self.get_object()
        self.object.editor = request.user.profile
        self.object.is_filled = True
        with transaction.commit_on_success(), reversion.create_revision():
            self.object.save()
            reversion.set_user(request.user)
            reversion.set_comment('comment...')

        return response

Если кто сталкивался, укажите на ошибки или куда копать, какую строку внимательней прочитать...
  • Вопрос задан
  • 3479 просмотров
Пригласить эксперта
Ответы на вопрос 1
crazyzubr
@crazyzubr
Python backend-developer
Попробуйте так:

with reversion.create_revision(manage_manually=True):
    self.object.save()
    reversion.default_revision_manager.save_revision(
            [self.object],
            user=request.user,
            comment='comment...'
    )
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы