Skip to content
Snippets Groups Projects
Unverified Commit d2af99e5 authored by Todd Dembrey's avatar Todd Dembrey Committed by GitHub
Browse files

Merge pull request #447 from OpenTechFund/bugfix/remove-round-forms-from-choice

Bugfix/remove round forms from choice
parents ad05ac9e 79578eb6
No related branches found
No related tags found
No related merge requests found
from django.utils.html import mark_safe
from wagtail.contrib.modeladmin.helpers import PermissionHelper
from wagtail.contrib.modeladmin.options import ModelAdmin, ModelAdminGroup
from opentech.apply.review.admin import ReviewFormAdmin
from opentech.apply.utils.admin import ListRelatedMixin
from .admin_helpers import (
ButtonsWithPreview,
FormsFundRoundListFilter,
......@@ -57,7 +56,7 @@ class NoDeletePermission(PermissionHelper):
return False
class ApplicationFormAdmin(ModelAdmin):
class ApplicationFormAdmin(ListRelatedMixin, ModelAdmin):
model = ApplicationForm
menu_icon = 'form'
list_display = ('name', 'used_by')
......@@ -70,22 +69,17 @@ class ApplicationFormAdmin(ModelAdmin):
('labbaseform', 'lab'),
]
def get_queryset(self, request):
qs = super().get_queryset(request)
related = [f'{form}_set__{field}' for form, field in self.related_models]
return qs.prefetch_related(*related)
def _list_related(self, obj, form, field):
return ', '.join(getattr(obj, f'{form}_set').values_list(f'{field}__title', flat=True))
def used_by(self, obj):
rows = list()
for form, field in self.related_models:
rows.append(self._list_related(obj, form, field))
return mark_safe('<br>'.join(rows))
class ApplyAdminGroup(ModelAdminGroup):
menu_label = 'Apply'
menu_icon = 'folder-open-inverse'
items = (RoundAdmin, SealedRoundAdmin, FundAdmin, LabAdmin, RFPAdmin, ApplicationFormAdmin, ReviewFormAdmin, CategoryAdmin)
items = (
RoundAdmin,
SealedRoundAdmin,
FundAdmin,
LabAdmin,
RFPAdmin,
ApplicationFormAdmin,
ReviewFormAdmin,
CategoryAdmin,
)
......@@ -69,7 +69,9 @@ class AbstractRelatedReviewForm(Orderable):
form = models.ForeignKey('review.ReviewForm', on_delete=models.PROTECT)
panels = [
FieldPanel('form')
FilteredFieldPanel('form', filter_query={
'roundbasereviewform__isnull': True,
})
]
@property
......
......@@ -4,6 +4,7 @@ from wagtail.contrib.modeladmin.options import ModelAdmin
from wagtail.contrib.modeladmin.views import CreateView, InstanceSpecificView
from opentech.apply.review.models import ReviewForm
from opentech.apply.utils.admin import ListRelatedMixin
from .admin_helpers import ButtonsWithClone
......@@ -14,12 +15,19 @@ class CloneView(CreateView, InstanceSpecificView):
self.instance.pk = None
class ReviewFormAdmin(ModelAdmin):
class ReviewFormAdmin(ListRelatedMixin, ModelAdmin):
model = ReviewForm
menu_icon = 'form'
list_display = ('name', 'used_by')
button_helper_class = ButtonsWithClone
clone_view_class = CloneView
related_models = [
('applicationbasereviewform', 'application'),
('roundbasereviewform', 'round'),
('labbasereviewform', 'lab'),
]
def get_admin_urls_for_registration(self):
urls = super().get_admin_urls_for_registration()
......
from django.utils.html import mark_safe
class ListRelatedMixin:
"""Provides a used_by column which can be found by defining related models in the
following format:
related_models = [
(<related_name>, <field_name>),
]
e.g. This would be object.<related_name>_set.field
"""
def get_queryset(self, request):
qs = super().get_queryset(request)
related = [f'{form}_set__{field}' for form, field in self.related_models]
return qs.prefetch_related(*related)
def _list_related(self, obj, form, field):
return ', '.join(getattr(obj, f'{form}_set').values_list(f'{field}__title', flat=True))
def used_by(self, obj):
rows = list()
for form, field in self.related_models:
related = self._list_related(obj, form, field)
if related:
rows.append(related)
return mark_safe('<br>'.join(rows))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment