Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Django에서 django-reversion으로 모델 되돌리기 구현하기

이 글에서는 Django에서 객체의 데이터 변경 이력을 추적하고, 삭제된 데이터를 손쉽게 복구하는 기능을 구현하는 방법을 알아봅니다. Reversion(되돌리기)은 삭제된 모델 데이터를 다시 가져오는 것을 의미하며, 클릭 한 번으로 삭제된 모든 데이터를 복구할 수 있을 뿐만 아니라 각 모델 객체의 변경 이력까지 추적해 줍니다.

django-reversion 설치 및 설정

먼저 Django 프로젝트와 앱을 생성한 뒤, settings.py의 INSTALLED_APPS에 해당 앱을 등록합니다.

그다음 urls.py를 설정하고 django-reversion 모듈을 설치합니다.

pip install django-reversion

settings.py에 다음 줄을 추가합니다.

INSTALLED_APPS = ['reversion']

예제 코드

이번 작업에서는 views.pyurls.py가 핵심이 아니므로 별도로 다루지 않겠습니다.

models.py에 다음 코드를 추가합니다.

from django.db import models

# Create your models here.
class Data(models.Model):
    Name = models.CharField(max_length=100)
    salary = models.CharField(max_length=20)

여기서 우리는 reversion 기능을 적용할 Django 모델을 하나 생성했습니다.

admin.py에는 다음과 같이 작성합니다.

from django.contrib import admin
from .models import Data
from reversion.admin import VersionAdmin

@admin.register(Data)
class ClientModelAdmin(VersionAdmin):
    pass

여기서 Data라는 모델에 대해 VersionAdmin을 상속받아 reversion 어드민을 등록했습니다. VersionAdmin을 상속하면 관리자 페이지에서 자동으로 버전 관리 기능이 활성화됩니다.

마이그레이션 실행

이제 터미널에서 다음 명령어를 순서대로 실행합니다.

python manage.py createinitialrevisions
python manage.py makemigrations
python manage.py migrate

createinitialrevisions 명령으로 기존 데이터의 초기 리비전을 생성한 후, 마이그레이션 파일을 만들고 데이터베이스에 반영합니다.

결과 확인

브라우저에서 https://127.0.0.1/admin 에 접속하여 Datas 모델의 어드민 페이지를 확인합니다.

관리자 페이지에서 객체를 수정하거나 삭제하면 VersionAdmin이 자동으로 버전 기록을 남깁니다. 삭제된 객체는 '삭제된 객체 복구(Recover deleted objects)' 메뉴를 통해 클릭 한 번으로 복원할 수 있으며, 각 객체의 히스토리를 조회해 누가 언제 어떤 필드를 변경했는지도 손쉽게 확인할 수 있습니다.