forked from mozilla/django-badger
/
admin.py
118 lines (84 loc) · 3.62 KB
/
admin.py
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
from django.conf import settings
from django.contrib import admin
from django import forms
from django.db import models
try:
from funfactory.urlresolvers import reverse
except ImportError, e:
from django.core.urlresolvers import reverse
from .models import (Badge, Award, Progress, DeferredAward)
UPLOADS_URL = getattr(settings, 'BADGER_UPLOADS_URL',
'%suploads/' % getattr(settings, 'MEDIA_URL', '/media/'))
def show_unicode(obj):
return unicode(obj)
show_unicode.short_description = "Display"
def show_image(obj):
img_url = "%s%s" % (UPLOADS_URL, obj.image)
return ('<a href="%s" target="_new"><img src="%s" width="48" height="48" /></a>' %
(img_url, img_url))
show_image.allow_tags = True
show_image.short_description = "Image"
def build_related_link(self, model_name, name_single, name_plural, qs):
link = '%s?%s' % (
reverse('admin:badger_%s_changelist' % model_name, args=[]),
'badge__exact=%s' % (self.id)
)
new_link = '%s?%s' % (
reverse('admin:badger_%s_add' % model_name, args=[]),
'badge=%s' % (self.id)
)
count = qs.count()
what = (count == 1) and name_single or name_plural
return ('<a href="%s">%s %s</a> (<a href="%s">new</a>)' %
(link, count, what, new_link))
def related_deferredawards_link(self):
return build_related_link(self, 'deferredaward', 'deferred', 'deferred',
self.deferredaward_set)
related_deferredawards_link.allow_tags = True
related_deferredawards_link.short_description = "Deferred Awards"
def related_awards_link(self):
return build_related_link(self, 'award', 'award', 'awards',
self.award_set)
related_awards_link.allow_tags = True
related_awards_link.short_description = "Awards"
class BadgeAdmin(admin.ModelAdmin):
list_display = ("id", "title", show_image, "slug", "unique", "creator",
related_awards_link, related_deferredawards_link, "created",)
list_display_links = ('id', 'title',)
search_fields = ("title", "slug", "image", "description",)
filter_horizontal = ('prerequisites', )
prepopulated_fields = {"slug": ("title",)}
formfield_overrides = {
models.ManyToManyField: {
"widget": forms.widgets.SelectMultiple(attrs={"size": 25})
}
}
def badge_link(self):
url = reverse('admin:badger_badge_change', args=[self.badge.id])
return '<a href="%s">%s</a>' % (url, self.badge)
badge_link.allow_tags = True
badge_link.short_description = 'Badge'
class AwardAdmin(admin.ModelAdmin):
list_display = (show_unicode, badge_link, show_image, 'user', 'creator',
'created', )
fields = ('badge', 'user', 'creator', )
search_fields = ("badge__title", "badge__slug", "badge__description",)
class ProgressAdmin(admin.ModelAdmin):
pass
def claim_code_link(self):
return '<a href="%s">%s</a>' % (self.get_claim_url(), self.claim_code)
claim_code_link.allow_tags = True
claim_code_link.short_description = "Claim Code"
class DeferredAwardAdmin(admin.ModelAdmin):
list_display = ('id', claim_code_link, 'claim_group', badge_link, 'email',
'reusable', 'creator', 'created', 'modified',)
list_display_links = ('id',)
list_filter = ('reusable', )
fields = ('badge', 'claim_code', 'email', 'reusable', 'description',)
readonly_fields = ('created', 'modified')
search_fields = ("badge__title", "badge__slug", "badge__description",)
for x in ((Badge, BadgeAdmin),
(Award, AwardAdmin),
(Progress, ProgressAdmin),
(DeferredAward, DeferredAwardAdmin),):
admin.site.register(*x)