diff --git a/symposion/sponsorship/admin.py b/symposion/sponsorship/admin.py index c78fc8b3ea5e661051e40ec72bbbd0574d9b10e1..61080171df8a31454aa024c56ab018bf4131a2d3 100644 --- a/symposion/sponsorship/admin.py +++ b/symposion/sponsorship/admin.py @@ -1,12 +1,18 @@ from __future__ import unicode_literals + from django.contrib import admin from django.utils.html import escape from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ -from symposion.sponsorship.models import SponsorLevel, Sponsor, Benefit, BenefitLevel, \ - SponsorBenefit - +from symposion.sponsorship.models import ( + Benefit, + BENEFITS, + BenefitLevel, + Sponsor, + SponsorBenefit, + SponsorLevel, +) class BenefitLevelInline(admin.TabularInline): model = BenefitLevel @@ -47,6 +53,7 @@ class SponsorAdmin(admin.ModelAdmin): }) ] inlines = [SponsorBenefitInline] + list_filter = ["level", "active"] list_display = ["name", "external_url", "level", "active", "contact", "applicant_field"] def contact(self, sponsor): @@ -62,24 +69,60 @@ class SponsorAdmin(admin.ModelAdmin): # @@@ kinda ugly but using choices= on NullBooleanField is broken form = super(SponsorAdmin, self).get_form(*args, **kwargs) form.base_fields["active"].widget.choices = [ - (u"1", "unreviewed"), - (u"2", "approved"), - (u"3", "rejected") + (u"1", _("unreviewed")), + (u"2", _("approved")), + (u"3", _("rejected")) ] return form + # Define accessor functions for our benefit fields and add them to + # list_display, so we can sort on them and give them sensible names. + # Add the fields to list_filters while we're at it. + for benefit in BENEFITS: + benefit_name = benefit['name'] + field_name = benefit['field_name'] + + def func_generator(ben): + def column_func(obj): + return getattr(obj, ben['field_name']) + column_func.short_description = ben['column_title'] + column_func.boolean = True + column_func.admin_order_field = ben['field_name'] + return column_func + list_display.append(func_generator(benefit)) + list_filter.append(field_name) + + def save_related(self, request, form, formsets, change): + super(SponsorAdmin, self).save_related(request, form, formsets, change) + obj = form.instance + obj.save() + class BenefitAdmin(admin.ModelAdmin): - list_display = ["name", "type", "description"] + list_display = ["name", "type", "description", "levels"] inlines = [BenefitLevelInline] + def levels(self, benefit): + return u", ".join(l.level.name for l in benefit.benefit_levels.all()) + class SponsorLevelAdmin(admin.ModelAdmin): inlines = [BenefitLevelInline] +class SponsorBenefitAdmin(admin.ModelAdmin): + list_display = ('benefit', 'sponsor', 'active', '_is_complete', 'show_text') + + def show_text(self, sponsor_benefit): + if sponsor_benefit.text: + return sponsor_benefit.text[:100] + else: + return _("None") + + admin.site.register(SponsorLevel, SponsorLevelAdmin) admin.site.register(Sponsor, SponsorAdmin) admin.site.register(Benefit, BenefitAdmin) +admin.site.register(SponsorBenefit, SponsorBenefitAdmin)