Skip to content

Commit 185f65d

Browse files
authored
Merge pull request #224 from buildingSMART/IVS-630_Minor_Django_Admin_Improvements
IVS-630 - Minor Django Admin improvements
2 parents a576ed3 + e722679 commit 185f65d

File tree

2 files changed

+55
-17
lines changed

2 files changed

+55
-17
lines changed

backend/apps/ifc_validation/admin.py

Lines changed: 52 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@
2626
from apps.ifc_validation_models.models import set_user_context
2727

2828
from .tasks import ifc_file_validation_task
29-
from .filters import ProducedByAdvancedFilter, ModelProducedByAdvancedFilter, CreatedByAdvancedFilter
29+
from .filters import ProducedByAdvancedFilter
30+
from .filters import ModelProducedByAdvancedFilter
31+
from .filters import CreatedByAdvancedFilter
3032

3133
from core import utils
3234
from core.filters import AdvancedDateFilter
@@ -62,14 +64,15 @@ class ValidationRequestAdmin(BaseAdmin, NonAdminAddable):
6264
('Auditing Information', {"classes": ("wide"), "fields": [("created", "created_by"), ("updated", "updated_by")]})
6365
]
6466

65-
list_display = ["id", "public_id", "file_name", "file_size_text", "authoring_tool_link", "model_link", "status", "progress", "queue_time_text", "duration_text", "is_vendor", "is_vendor_self_declared", "is_deleted", "channel", "created", "created_by", "updated", "updated_by"]
67+
list_display = ["id", "public_id", "file_name", "file_size_text", "authoring_tool_link", "model_link", "status", "progress", "queue_time_text", "duration_text", "is_vendor", "is_vendor_self_declared", "is_deleted", "channel_text", "created", "created_by_link", "updated", "updated_by"]
6668
readonly_fields = ["id", "public_id", "deleted", "file_name", "file", "file_size_text", "duration_text", "started", "completed", "channel", "created", "created_by", "updated", "updated_by"]
6769
date_hierarchy = "created"
6870

6971
list_filter = [
7072
"status",
7173
"deleted",
72-
ModelProducedByAdvancedFilter,
74+
"model__produced_by",
75+
ModelProducedByAdvancedFilter,
7376
"channel",
7477
CreatedByAdvancedFilter,
7578
"created_by__useradditionalinfo__is_vendor",
@@ -137,6 +140,17 @@ def model_link(self, obj):
137140
)
138141
model_link.admin_order_field = 'model'
139142

143+
@admin.display(description="Created By")
144+
def created_by_link(self, obj):
145+
146+
link = reverse("admin:auth_user_change", args=[obj.created_by.id])
147+
return format_html(
148+
'<a href="{}">{}</a>',
149+
link,
150+
obj.created_by.username,
151+
)
152+
created_by_link.admin_order_field = 'created_by'
153+
140154
@admin.display(description="Duration (sec)")
141155
def duration_text(self, obj):
142156

@@ -179,6 +193,11 @@ def file_size_text(self, obj):
179193

180194
return utils.format_human_readable_file_size(obj.size)
181195

196+
@admin.display(description="Channel")
197+
def channel_text(self, obj):
198+
return obj.get_channel_display().upper()
199+
channel_text.admin_order_field = 'channel'
200+
182201
@admin.action(
183202
description="Permanently delete selected Validation Requests",
184203
permissions=["hard_delete"]
@@ -321,7 +340,7 @@ class ValidationTaskAdmin(BaseAdmin, NonAdminAddable):
321340
('Auditing Information', {"classes": ("wide"), "fields": ["created", "updated"]})
322341
]
323342

324-
list_display = ["id", "public_id", "request", "type", "status", "progress", "started", "ended", "queue_time_text", "duration_text", "created", "updated"]
343+
list_display = ["id", "public_id", "request", "type", "status", "progress", "started", "ended", "duration_text", "created", "updated"]
325344
readonly_fields = ["id", "public_id", "request", "type", "process_id", "process_cmd", "started", "ended", "created", "updated"]
326345
date_hierarchy = "created"
327346

@@ -567,11 +586,15 @@ class AuthoringToolAdmin(BaseAdmin):
567586
('General Information', {"classes": ("wide"), "fields": ["id", "company", "name", "version", "nbr_of_requests"]}),
568587
('Auditing Information', {"classes": ("wide"), "fields": [("created", "updated")]})
569588
]
570-
list_display = ["id", "company_link", "name", "version", "nbr_of_requests", "created", "updated"]
571-
readonly_fields = ["id", "nbr_of_requests", "created", "updated"]
589+
list_display = ["id", "company_link", "name", "version", "nbr_of_requests_link", "created", "updated"]
590+
readonly_fields = ["id", "created", "updated"]
572591
list_filter = ["company", ('created', AdvancedDateFilter), ('updated', AdvancedDateFilter)]
573592
search_fields = ("name", "version", "company__name")
574593

594+
def get_queryset(self, request):
595+
qs = super().get_queryset(request)
596+
return qs.annotate(nbr_of_requests=Count('models')) # good proxy, no direct link to Validation Request
597+
575598
@admin.display(description="Company")
576599
def company_link(self, obj):
577600

@@ -586,14 +609,18 @@ def company_link(self, obj):
586609
)
587610
company_link.admin_order_field = 'company'
588611

589-
def get_queryset(self, request):
590-
qs = super().get_queryset(request)
591-
return qs.annotate(nbr_of_requests=Count('models')) # good proxy, no direct link to Validation Request
592-
593612
@admin.display(description="# Requests")
594-
def nbr_of_requests(self, obj):
595-
return obj.nbr_of_requests
596-
nbr_of_requests.admin_order_field = 'nbr_of_requests'
613+
def nbr_of_requests_link(self, obj):
614+
615+
link = reverse("admin:ifc_validation_models_validationrequest_changelist")
616+
query_string = '?model__produced_by__exact=' + str(obj.id)
617+
return format_html(
618+
'<a href="{}{}" title="Click to show a filtered list of Validation Requests for this Authoring Tool">{}</a>',
619+
link,
620+
query_string,
621+
obj.nbr_of_requests
622+
)
623+
nbr_of_requests_link.admin_order_field = 'nbr_of_requests'
597624

598625

599626
class UserAdditionalInfoInlineAdmin(admin.StackedInline):
@@ -613,7 +640,7 @@ class CustomUserAdmin(UserAdmin, BaseAdmin):
613640

614641
inlines = [ UserAdditionalInfoInlineAdmin ]
615642

616-
list_display = ["id", "username", "email", "first_name", "last_name", "is_active", "is_staff", "company_link", "is_vendor", "is_vendor_self_declared", "nbr_of_requests", "date_joined", "last_login"]
643+
list_display = ["id", "username", "email", "first_name", "last_name", "is_active", "is_staff", "company_link", "is_vendor", "is_vendor_self_declared", "nbr_of_requests_link", "date_joined", "last_login"]
617644
list_filter = [
618645
'is_staff',
619646
'is_superuser',
@@ -668,9 +695,17 @@ def is_vendor_self_declared(self, obj):
668695
is_vendor_self_declared.admin_order_field = 'useradditionalinfo__is_vendor_self_declared'
669696

670697
@admin.display(description="# Requests")
671-
def nbr_of_requests(self, obj):
672-
return obj.nbr_of_requests
673-
nbr_of_requests.admin_order_field = 'nbr_of_requests'
698+
def nbr_of_requests_link(self, obj):
699+
700+
link = reverse("admin:ifc_validation_models_validationrequest_changelist")
701+
query_string = '?created_by__exact=' + str(obj.id)
702+
return format_html(
703+
'<a href="{}{}" title="Click to show a filtered list of Validation Requests for this User">{}</a>',
704+
link,
705+
query_string,
706+
obj.nbr_of_requests
707+
)
708+
nbr_of_requests_link.admin_order_field = 'nbr_of_requests'
674709

675710
@admin.action(
676711
description="Remove Company & is_vendor status from selected users",

backend/core/urls.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ def get(self, request, *args, **kwargs):
5656

5757
if DEVELOPMENT:
5858
urlpatterns += [
59+
# redirect root to admin
60+
path("", lambda request: HttpResponseRedirect("/admin/")),
61+
# load debug toolbar
5962
path("__debug__/", include("debug_toolbar.urls")),
6063
]
6164

0 commit comments

Comments
 (0)