|
1 | | -# Copyright The IETF Trust 2011-2020, All Rights Reserved |
2 | | -# -*- coding: utf-8 -*- |
| 1 | +# Copyright The IETF Trust 2011-2026, All Rights Reserved |
3 | 2 |
|
4 | 3 |
|
5 | 4 | from django.contrib import admin |
6 | | -from django.utils.encoding import force_str |
7 | | - |
8 | | -def name(obj): |
9 | | - if hasattr(obj, 'abbrev'): |
10 | | - return obj.abbrev() |
11 | | - elif hasattr(obj, 'name'): |
12 | | - if callable(obj.name): |
13 | | - name = obj.name() |
14 | | - else: |
15 | | - name = force_str(obj.name) |
16 | | - if name: |
17 | | - return name |
18 | | - return str(obj) |
19 | | - |
20 | | -def admin_link(field, label=None, ordering="", display=name, suffix=""): |
21 | | - if not label: |
22 | | - label = field.capitalize().replace("_", " ").strip() |
23 | | - if ordering == "": |
24 | | - ordering = field |
25 | | - def _link(self): |
26 | | - obj = self |
27 | | - for attr in field.split("__"): |
28 | | - obj = getattr(obj, attr) |
29 | | - if callable(obj): |
30 | | - obj = obj() |
31 | | - if hasattr(obj, "all"): |
32 | | - objects = obj.all() |
33 | | - elif callable(obj): |
34 | | - objects = obj() |
35 | | - if not hasattr(objects, "__iter__"): |
36 | | - objects = [ objects ] |
37 | | - elif hasattr(obj, "__iter__"): |
38 | | - objects = obj |
39 | | - else: |
40 | | - objects = [ obj ] |
41 | | - chunks = [] |
42 | | - for obj in objects: |
43 | | - app = obj._meta.app_label |
44 | | - model = obj.__class__.__name__.lower() |
45 | | - id = obj.pk |
46 | | - chunks += [ '<a href="/admin/%(app)s/%(model)s/%(id)s/%(suffix)s">%(display)s</a>' % |
47 | | - {'app':app, "model": model, "id":id, "display": display(obj), "suffix":suffix, } ] |
48 | | - return ", ".join(chunks) |
49 | | - _link.allow_tags = True |
50 | | - _link.short_description = label |
51 | | - _link.admin_order_field = ordering |
52 | | - return _link |
| 5 | +from .models import DumpInfo, DirtyBits |
53 | 6 |
|
54 | 7 |
|
55 | 8 | class SaferStackedInline(admin.StackedInline): |
56 | 9 | """StackedInline without delete by default""" |
| 10 | + |
57 | 11 | can_delete = False # no delete button |
58 | 12 | show_change_link = True # show a link to the resource (where it can be deleted) |
59 | 13 |
|
60 | 14 |
|
61 | 15 | class SaferTabularInline(admin.TabularInline): |
62 | 16 | """TabularInline without delete by default""" |
| 17 | + |
63 | 18 | can_delete = False # no delete button |
64 | 19 | show_change_link = True # show a link to the resource (where it can be deleted) |
65 | 20 |
|
66 | 21 |
|
67 | | -from .models import DumpInfo |
| 22 | +@admin.register(DumpInfo) |
68 | 23 | class DumpInfoAdmin(admin.ModelAdmin): |
69 | | - list_display = ['date', 'host', 'tz'] |
70 | | - list_filter = ['date'] |
71 | | -admin.site.register(DumpInfo, DumpInfoAdmin) |
| 24 | + list_display = ["date", "host", "tz"] |
| 25 | + list_filter = ["date"] |
| 26 | + |
| 27 | + |
| 28 | +@admin.register(DirtyBits) |
| 29 | +class DirtyBitsAdmin(admin.ModelAdmin): |
| 30 | + list_display = ["slug", "dirty_time", "processed_time"] |
0 commit comments