simple history 이력 확인

2023. 10. 16. 17:58Python/Django

목차

    내용

    • Django 사용 시에 Model의 이력관리를 위해 simple history를 사용하는 경우가 많다.
    • simple history를 이용해 실수로 삭제를 해서 object를 조회하기 힘든 경우에도 조회나 복구가 가능하다.

    simple history

     

    django-simple-history — django-simple-history 3.5.0.post4+g4d39103 documentation

    © Copyright 2013, Corey Bertram. Revision 4d39103e.

    django-simple-history.readthedocs.io


    설치방법

    1. Install

    $ pip install django-simple-history
    

     

    2. Settings

    INSTALLED_APPS = [
        # ...
        'simple_history',
    ]
    

    3. Middleware

    MIDDLEWARE = [
        # ...
        'simple_history.middleware.HistoryRequestMiddleware',
    ]
    

    4. Model

    from django.db import models
    from simple_history.models import HistoricalRecords
    
    class Model(models.Model):
        question = models.CharField(max_length=200)
        history = HistoricalRecords()

     

    사용 예시 

    # 히스토리 조회
    Model.objects.get(id=1).history.all()
    
    # 삭제 이력 조회
    Model.history.filter(history_type='-')

     

    history type 종류

    history_type 설명
    '+' (추가) 새로운 레코드가 추가될 때 발생하는 이력 유형입니다.
    '~' (변경) 레코드가 변경될 때 발생하는 이력 유형입니다.
    '-' (삭제) 레코드가 삭제될 때 발생하는 이력 유형입니다.
    '!' (초기 레코드 생성)  모델이 최초로 생성될 때 발생하는 이력 유형입니다.
    '~+' (변경된 후 추가) 레코드가 변경된 후 추가될 때 발생하는 이력 유형입니다.
    '~~' (두 번 변경) 레코드가 두 번 이상 변경될 때 발생하는 이력 유형입니다.
    '~-' (변경된 후 삭제) 레코드가 변경된 후 삭제될 때 발생하는 이력 유형입니다.
    '!~' (초기 레코드 생성 후 변경) 레코드가 초기 생성 이후 변경될 때 발생하는 이력 유형입니다.
    '!+' (초기 레코드 생성 후 추가)  레코드가 초기 생성 이후 추가될 때 발생하는 이력 유형입니다.
    '!-' (초기 레코드 생성 후 삭제) 레코드가 초기 생성 이후 삭제될 때 발생하는 이력 유형입니다.

     

    이력 복구

    history = Model.history.get(history_id=1234)
    instance = history.instance
    instance.pk=None
    instance.save()
    • 해당 방식은 object를 복제할때 사용할 수도 있음.