From 5776278e9d275200aa10d40c8da6afdcf402fd8e Mon Sep 17 00:00:00 2001 From: George Hickman <george@ghickman.co.uk> Date: Thu, 18 Jul 2019 16:06:35 +0100 Subject: [PATCH] List and link to Application forms for each Round on its IndexPage --- opentech/apply/funds/admin.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/opentech/apply/funds/admin.py b/opentech/apply/funds/admin.py index f7b94f5f3..6df4d511f 100644 --- a/opentech/apply/funds/admin.py +++ b/opentech/apply/funds/admin.py @@ -1,3 +1,4 @@ +from django.urls import reverse from django.utils.safestring import mark_safe from wagtail.contrib.modeladmin.helpers import PermissionHelper from wagtail.contrib.modeladmin.options import ModelAdmin, ModelAdminGroup @@ -26,14 +27,38 @@ class BaseRoundAdmin(ModelAdmin): class RoundAdmin(BaseRoundAdmin): model = Round menu_icon = 'repeat' - list_display = ('title', 'fund', 'start_date', 'end_date', 'sealed') + list_display = ('title', 'fund', 'start_date', 'end_date', 'sealed', 'applications') + def applications(self, obj): + def build_urls(applications): + for application in applications: + url = self.get_other_admin_edit_url(application.form) + yield f'<a href="{url}">{application}</a>' + + urls = list(build_urls(obj.forms.all())) + + if not urls: + return + + return mark_safe('<br />'.join(urls)) def fund(self, obj): url = self.url_helper.get_action_url('edit', obj.fund.id) url_tag = f'<a href="{url}">{obj.fund}</a>' return mark_safe(url_tag) + def get_other_admin_edit_url(self, obj): + """ + Build an admin URL for the given obj. + + This builds a ModelAdmin URL for the given object, mirroring Wagtail's + ModelAdmin.url_helper.get_action_url but works for any ModelAdmin. + """ + app_label = obj._meta.app_label + model_name = obj._meta.model_name + url_name = f'{app_label}_{model_name}_modeladmin_edit' + return reverse(url_name, args=[obj.id]) + class ScreeningStatusPermissionHelper(PermissionHelper): def user_can_edit_obj(self, user, obj): -- GitLab