-
Todd Dembrey authoredTodd Dembrey authored
admin_helpers.py 2.43 KiB
from django import forms
from django.contrib import admin
from django.urls import reverse
from django.utils.translation import ugettext as _
from wagtail.contrib.modeladmin.forms import ParentChooserForm
from wagtail.contrib.modeladmin.helpers import PageButtonHelper
from wagtail.contrib.modeladmin.views import ChooseParentView
from wagtail.core.models import Page
class VerboseLabelModelChoiceField(forms.ModelChoiceField):
def label_from_instance(str, obj):
return '[{}] {}'.format(obj._meta.verbose_name, obj.title)
class FundChooserForm(ParentChooserForm):
"""Changes the default chooser to be fund orientated """
parent_page = VerboseLabelModelChoiceField(
label=_('Fund or RFP'),
required=True,
empty_label=None,
queryset=Page.objects.none(),
widget=forms.RadioSelect(),
)
class RoundFundChooserView(ChooseParentView):
def get_form(self, request):
parents = self.permission_helper.get_valid_parent_pages(request.user).specific()
return FundChooserForm(parents, request.POST or None)
class ButtonsWithPreview(PageButtonHelper):
def preview_button(self, obj, classnames_add, classnames_exclude):
classnames = self.copy_button_classnames + classnames_add
cn = self.finalise_classname(classnames, classnames_exclude)
return {
'url': reverse('wagtailadmin_pages:view_draft', args=(obj.id,)),
'label': 'Preview',
'classname': cn,
'title': 'Preview this %s' % self.verbose_name,
}
def get_buttons_for_obj(self, obj, exclude=list(), classnames_add=list(),
classnames_exclude=list()):
btns = super().get_buttons_for_obj(obj, exclude, classnames_add, classnames_exclude)
# Put preview before delete
btns.insert(-1, self.preview_button(obj, classnames_add, classnames_exclude))
return btns
class FormsFundRoundListFilter(admin.SimpleListFilter):
title = 'useage'
parameter_name = 'form-usage'
def lookups(self, request, model_admin):
return (
('applicationbase', _('Funds & RFP')),
('roundbase', _('Rounds and Sealed Rounds')),
('labbase', _('Labs')),
)
def queryset(self, request, queryset):
value = self.value()
if value:
query = {f'{value}form__isnull': False}
return queryset.filter(**query).distinct()
return queryset