21b2a01a84
This is all noop in Py3, and Py2 is broke now in various places. Dropping Py2 code as it will not be a thing going forward. Django 2 is the next release, Py2 support will be dropped, as such, dropping this is forward looking.
128 lines
3.8 KiB
Python
128 lines
3.8 KiB
Python
from django.utils.html import escape
|
|
from django.utils.safestring import mark_safe
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
from django.contrib import admin
|
|
|
|
from symposion.sponsorship.models import (
|
|
Benefit,
|
|
BENEFITS,
|
|
BenefitLevel,
|
|
Sponsor,
|
|
SponsorBenefit,
|
|
SponsorLevel,
|
|
)
|
|
|
|
|
|
class BenefitLevelInline(admin.TabularInline):
|
|
model = BenefitLevel
|
|
extra = 0
|
|
|
|
|
|
class SponsorBenefitInline(admin.StackedInline):
|
|
model = SponsorBenefit
|
|
extra = 0
|
|
fieldsets = [
|
|
(None, {
|
|
"fields": [
|
|
("benefit", "active"),
|
|
("max_words", "other_limits"),
|
|
"text",
|
|
"upload",
|
|
]
|
|
})
|
|
]
|
|
|
|
|
|
class SponsorAdmin(admin.ModelAdmin):
|
|
|
|
save_on_top = True
|
|
fieldsets = [
|
|
(None, {
|
|
"fields": [
|
|
("name", "applicant"),
|
|
("level", "active"),
|
|
"external_url",
|
|
"annotation",
|
|
("contact_name", "contact_email")
|
|
]
|
|
}),
|
|
("Metadata", {
|
|
"fields": ["added"],
|
|
"classes": ["collapse"]
|
|
})
|
|
]
|
|
inlines = [SponsorBenefitInline]
|
|
list_filter = ["level", "active"]
|
|
list_display = ["name", "external_url", "level", "active", "contact", "applicant_field"]
|
|
|
|
def contact(self, sponsor):
|
|
return mark_safe('<a href="mailto:%s">%s</a>' % (escape(sponsor.contact_email), escape(sponsor.contact_name)))
|
|
|
|
def applicant_field(self, sponsor):
|
|
name = sponsor.applicant.get_full_name()
|
|
email = sponsor.applicant.email
|
|
return mark_safe('<a href="mailto:%s">%s</a>' % (escape(email), escape(name)))
|
|
applicant_field.short_description = _(u"Applicant")
|
|
|
|
def get_form(self, *args, **kwargs):
|
|
# @@@ kinda ugly but using choices= on NullBooleanField is broken
|
|
form = super(SponsorAdmin, self).get_form(*args, **kwargs)
|
|
form.base_fields["active"].widget.choices = [
|
|
("1", _("unreviewed")),
|
|
("2", _("approved")),
|
|
("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", "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)
|