2
0
Эх сурвалжийг харах

allow accessing admin change pages by .abid as well as .id

Nick Sweeting 1 жил өмнө
parent
commit
0c236b034b

+ 15 - 4
archivebox/abid_utils/admin.py

@@ -108,6 +108,15 @@ class ABIDModelAdmin(admin.ModelAdmin):
     
     def change_view(self, request, object_id, form_url="", extra_context=None):
         self.request = request
+
+        if object_id:
+            try:
+                object_uuid = str(self.model.objects.only('pk').get(abid=self.model.abid_prefix + object_id.split('_', 1)[-1]).pk)
+                if object_id != object_uuid:
+                    return redirect(self.request.path.replace(object_id, object_uuid), permanent=False)
+            except (self.model.DoesNotExist, ValidationError):
+                pass
+
         return super().change_view(request, object_id, form_url, extra_context)
 
     def get_form(self, request, obj=None, **kwargs):
@@ -117,7 +126,9 @@ class ABIDModelAdmin(admin.ModelAdmin):
             form.base_fields['created_by'].initial = request.user
         return form
 
-    # def save_model(self, request, obj, form, change):
-    #     if getattr(obj, 'created_by_id', None) in (None, get_or_create_system_user_pk()):
-    #         obj.created_by = request.user
-    #     obj.save()
+    def save_model(self, request, obj, form, change):
+        old_abid = obj.abid
+        super().save_model(request, obj, form, change)
+        new_abid = obj.abid
+        if new_abid != old_abid:
+            messages.warning(request, f"The object's ABID has been updated! {old_abid} -> {new_abid} (any references to the old ABID will need to be updated)")

+ 3 - 0
archivebox/api/v1_core.py

@@ -78,6 +78,9 @@ class MinimalArchiveResultSchema(Schema):
     status: str
     output: str
 
+    start_ts: Optional[datetime]
+    end_ts: Optional[datetime]
+
     @staticmethod
     def resolve_created_by_id(obj):
         return str(obj.created_by_id)

+ 5 - 1
archivebox/core/admin.py

@@ -21,6 +21,7 @@ from django.contrib.auth import get_user_model
 from django.contrib.auth.admin import UserAdmin
 from django.core.paginator import Paginator
 from django.core.exceptions import ValidationError
+from django.template import Template, RequestContext
 from django.conf import settings
 from django import forms
 
@@ -250,7 +251,10 @@ class ArchiveResultInline(admin.TabularInline):
 
     def get_parent_object_from_request(self, request):
         resolved = resolve(request.path_info)
-        return self.parent_model.objects.get(pk=resolved.kwargs['object_id'])
+        try:
+            return self.parent_model.objects.get(pk=resolved.kwargs['object_id'])
+        except (self.parent_model.DoesNotExist, ValidationError):
+            return self.parent_model.objects.get(abid=self.parent_model.abid_prefix + resolved.kwargs['object_id'].split('_', 1)[-1])
 
     @admin.display(
         description='Completed',