Skip to content

Commit 985dd21

Browse files
committed
Provide a utility function admin_link() for use in admin list pages.
- Legacy-Id: 2795
1 parent 3686b73 commit 985dd21

1 file changed

Lines changed: 47 additions & 0 deletions

File tree

ietf/utils/admin.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
2+
def name(obj):
3+
if hasattr(obj, 'abbrev'):
4+
return obj.abbrev()
5+
elif hasattr(obj, 'name'):
6+
if callable(obj.name):
7+
name = obj.name()
8+
else:
9+
name = unicode(obj.name)
10+
if name:
11+
return name
12+
return unicode(obj)
13+
14+
def admin_link(field, label=None, ordering="", display=name, suffix=""):
15+
if not label:
16+
label = field.capitalize().replace("_", " ").strip()
17+
if ordering == "":
18+
ordering = field
19+
def _link(self):
20+
obj = self
21+
for attr in field.split("__"):
22+
obj = getattr(obj, attr)
23+
if callable(obj):
24+
obj = obj()
25+
if hasattr(obj, "all"):
26+
objects = obj.all()
27+
elif callable(obj):
28+
objects = obj()
29+
if not hasattr(objects, "__iter__"):
30+
objects = [ objects ]
31+
elif hasattr(obj, "__iter__"):
32+
objects = obj
33+
else:
34+
objects = [ obj ]
35+
chunks = []
36+
for obj in objects:
37+
app = obj._meta.app_label
38+
model = obj.__class__.__name__.lower()
39+
id = obj.pk
40+
chunks += [ u'<a href="/admin/%(app)s/%(model)s/%(id)s/%(suffix)s">%(display)s</a>' %
41+
{'app':app, "model": model, "id":id, "display": display(obj), "suffix":suffix, } ]
42+
return u", ".join(chunks)
43+
_link.allow_tags = True
44+
_link.short_description = label
45+
_link.admin_order_field = ordering
46+
return _link
47+

0 commit comments

Comments
 (0)