Source code for apis_core.history.views

from django.contrib.contenttypes.models import ContentType
from django.shortcuts import redirect
from django.urls import reverse
from django.utils import timezone
from django.views.generic.detail import DetailView
from django_tables2 import SingleTableMixin
from django_tables2.tables import table_factory

from apis_core.generic.helpers import first_member_match, module_paths
from apis_core.generic.views import GenericModelMixin

from .tables import HistoryGenericTable


[docs] class HistoryView(GenericModelMixin, SingleTableMixin, DetailView): template_name = "history/history.html"
[docs] def get_table_class(self): table_modules = module_paths(self.model, path="tables", suffix="HistoryTable") table_class = first_member_match(table_modules, HistoryGenericTable) return table_factory(self.model, table_class)
[docs] def get_table_data(self): return self.get_object().get_history_data()
[docs] def create_new_version(request, contenttype, pk): """Gets the version of the history instance and creates a new version.""" model = contenttype.model_class() instance = model.objects.get(id=pk) history_latest = instance.history.latest() latest_version_list = [ int(x.replace("v", "")) for x in instance.history.filter(version_tag__isnull=False).values_list( "version_tag", flat=True ) ] history_latest.history_id = None history_latest.history_date = timezone.now() history_latest.save() if latest_version_list: latest_version = max(latest_version_list) else: latest_version = 0 history_latest.set_version_tag(f"v{latest_version + 1}") return redirect( reverse( "apis_core:generic:detail", args=[ ContentType.objects.get_for_model(history_latest.__class__), history_latest.history_id, ], ) )