Files
ihrm/horilla_views/generic/cbv/history.py
2025-04-28 10:31:12 +05:30

60 lines
1.8 KiB
Python

"""
horilla_views/generic/cbv/history.py
"""
from django.apps import apps
from django.contrib import messages
from django.utils.decorators import method_decorator
from django.views.generic import DetailView
from simple_history.utils import get_history_model_for_model
from horilla.horilla_middlewares import _thread_locals
from horilla_views.cbv_methods import hx_request_required
from horilla_views.generic.cbv.views import HorillaFormView
from horilla_views.history_methods import get_diff
@method_decorator(hx_request_required, name="dispatch")
class HorillaHistoryView(DetailView):
"""
GenericHorillaProfileView
"""
template_name = "generic/horilla_history_view.html"
has_perm_to_revert = False
fields: list = []
history_related_name = "history"
def get_context_data(self, **kwargs):
"""
Get context data
"""
context = super().get_context_data(**kwargs)
instance = self.get_object()
context["tracking"] = get_diff(instance, self.history_related_name)
context["model"] = (
f"{self.model._meta.app_label}.{self.model._meta.object_name}"
)
context["has_perm_to_revert"] = self.has_perm_to_revert
return context
def __init__(self, **kwargs):
super().__init__(**kwargs)
request = getattr(_thread_locals, "request", None)
self.request = request
def post(self, request, history_id, *args, **kwargs):
"""
Revert
"""
app, model = request.GET["model"].split(".")
self.model = apps.get_model(app, model)
history = get_history_model_for_model(self.model).objects.get(
history_id=history_id
)
history.instance.save()
messages.success(request, "History reverted")
return HorillaFormView.HttpResponse()