Files
@ 959aefd856f5
Branch filter:
Location: symposion_app/vendor/symposion/sponsorship/admin.py - annotation
959aefd856f5
3.8 KiB
text/x-python
Re-enable CI
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | 3653cf3c69b5 3653cf3c69b5 3653cf3c69b5 46e38bc75841 6dd80f9ddb6f 6dd80f9ddb6f 509e275706f0 509e275706f0 509e275706f0 509e275706f0 509e275706f0 509e275706f0 509e275706f0 509e275706f0 46e38bc75841 6dd80f9ddb6f 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 36ab6d599ffc 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 8bc696a2dcc0 3653cf3c69b5 3653cf3c69b5 3653cf3c69b5 3653cf3c69b5 3653cf3c69b5 3653cf3c69b5 3653cf3c69b5 3653cf3c69b5 3653cf3c69b5 3653cf3c69b5 36ab6d599ffc 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 3207621058b8 3207621058b8 3207621058b8 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 3ffcc4da7c24 3ffcc4da7c24 36ab6d599ffc 8bc696a2dcc0 3ffcc4da7c24 3ffcc4da7c24 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 3ffcc4da7c24 3ffcc4da7c24 36ab6d599ffc 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 8bc696a2dcc0 3ffcc4da7c24 3ffcc4da7c24 3ffcc4da7c24 8bc696a2dcc0 | 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)
|