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

This commit is contained in:
Nick Sweeting 2024-09-04 23:42:55 -07:00
parent cbf2a8fdc3
commit 0c236b034b
No known key found for this signature in database
3 changed files with 23 additions and 5 deletions

View file

@ -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)")

View file

@ -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)

View file

@ -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',