-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathadmin.py
More file actions
125 lines (103 loc) · 3.18 KB
/
admin.py
File metadata and controls
125 lines (103 loc) · 3.18 KB
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
__copyright__ = "Copyright 2025 TU Dresden / KOMET Project"
__author__ = "Daniel Nüst & KOMET Team"
__license__ = "AGPL v3"
from django.contrib import admin
from plugins.geometadata.models import ArticleGeometadata, PreprintGeometadata
class AbstractGeometadataAdmin(admin.ModelAdmin):
"""Base admin configuration for geometadata models."""
list_display = [
"get_content_title",
"place_name",
"has_spatial",
"has_temporal",
"updated",
]
list_filter = ["created", "updated"]
search_fields = ["place_name", "admin_units"]
readonly_fields = [
"bbox_north",
"bbox_south",
"bbox_east",
"bbox_west",
"created",
"updated",
]
fieldsets = (
(
"Spatial Metadata",
{
"fields": (
"geometry_wkt",
"place_name",
"admin_units",
),
"description": (
"Enter geographic coverage. Geometry should be in WKT format. "
"Example: POLYGON((-10 35, 40 35, 40 70, -10 70, -10 35))"
),
},
),
(
"Bounding Box (auto-calculated)",
{
"fields": (
("bbox_north", "bbox_south"),
("bbox_east", "bbox_west"),
),
"classes": ("collapse",),
},
),
(
"Temporal Metadata",
{
"fields": ("temporal_periods",),
},
),
(
"Timestamps",
{
"fields": ("created", "updated"),
"classes": ("collapse",),
},
),
)
def has_spatial(self, obj):
return obj.has_spatial_data()
has_spatial.boolean = True
has_spatial.short_description = "Has Spatial"
def has_temporal(self, obj):
return obj.has_temporal_data()
has_temporal.boolean = True
has_temporal.short_description = "Has Temporal"
@admin.register(ArticleGeometadata)
class ArticleGeometadataAdmin(AbstractGeometadataAdmin):
"""Admin for Article geometadata."""
list_display = ["article"] + AbstractGeometadataAdmin.list_display[1:]
raw_id_fields = ["article"]
fieldsets = (
(
None,
{
"fields": ("article",),
},
),
) + AbstractGeometadataAdmin.fieldsets
def get_content_title(self, obj):
return obj.article.title[:50] if obj.article else "-"
get_content_title.short_description = "Article"
@admin.register(PreprintGeometadata)
class PreprintGeometadataAdmin(AbstractGeometadataAdmin):
"""Admin for Preprint geometadata."""
list_display = ["preprint"] + AbstractGeometadataAdmin.list_display[1:]
raw_id_fields = ["preprint"]
fieldsets = (
(
None,
{
"fields": ("preprint",),
},
),
) + AbstractGeometadataAdmin.fieldsets
def get_content_title(self, obj):
return obj.preprint.title[:50] if obj.preprint else "-"
get_content_title.short_description = "Preprint"