diff --git a/rdmo/projects/admin.py b/rdmo/projects/admin.py index fcf6749b5c..1c82a6a5e8 100644 --- a/rdmo/projects/admin.py +++ b/rdmo/projects/admin.py @@ -1,5 +1,7 @@ from django.contrib import admin from django.db.models import Prefetch +from django.urls import reverse +from django.utils.safestring import mark_safe from .models import ( Continuation, @@ -30,7 +32,7 @@ def get_queryset(self, request): ) def owners(self, obj): - return ', '.join([membership.user.username for membership in obj.owner_memberships]) + return [membership.user.get_full_name() for membership in obj.owner_memberships] @admin.register(Membership) @@ -80,7 +82,7 @@ class IssueResourceAdmin(admin.ModelAdmin): @admin.register(Snapshot) class SnapshotAdmin(admin.ModelAdmin): search_fields = ('title', 'project__title', 'project__user__username') - list_display = ('title', 'project', 'owners', 'updated', 'created') + list_display = ('title', 'project_title', 'project_owners', 'updated', 'created') def get_queryset(self, request): return Snapshot.objects.prefetch_related( @@ -91,16 +93,39 @@ def get_queryset(self, request): ) ).select_related('project') - def owners(self, obj): - return ', '.join([membership.user.username for membership in obj.project.owner_memberships]) + def project_title(self, obj): + url = reverse('admin:projects_project_change', args=[obj.project.id]) + link = f'{obj.project.title}' + return mark_safe(link) + + def project_owners(self, obj): + return [membership.user.get_full_name() for membership in obj.project.owner_memberships] @admin.register(Value) class ValueAdmin(admin.ModelAdmin): search_fields = ('attribute__uri', 'project__title', 'snapshot__title', 'project__user__username') - list_display = ('attribute', 'set_prefix', 'set_index', 'collection_index', 'project', 'snapshot_title') + list_display = ('attribute', 'set_prefix', 'set_index', 'collection_index', 'value_type', + 'project_title', 'project_owners', 'snapshot_title', 'updated', 'created') list_filter = ('value_type', ) + def get_queryset(self, request): + return Value.objects.prefetch_related( + Prefetch( + 'project__memberships', + queryset=Membership.objects.filter(role='owner').select_related('user'), + to_attr='owner_memberships' + ) + ).select_related('attribute', 'project', 'snapshot') + def snapshot_title(self, obj): if obj.snapshot: return obj.snapshot.title + + def project_title(self, obj): + url = reverse('admin:projects_project_change', args=[obj.project.id]) + link = f'{obj.project.title}' + return mark_safe(link) + + def project_owners(self, obj): + return [membership.user.get_full_name() for membership in obj.project.owner_memberships]