Skip to content

Commit ebfe38e

Browse files
committed
💄 [#1885] Display correct file URL for readonly admins
1 parent 4138e9a commit ebfe38e

File tree

1 file changed

+41
-19
lines changed

1 file changed

+41
-19
lines changed

src/open_inwoner/accounts/admin.py

+41-19
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,26 @@
1515
from .models import Action, Appointment, Document, Invite, Message, User
1616

1717

18+
class ReadOnlyFileMixin:
19+
"""
20+
By default, private media fields do not display the correct URL when readonly
21+
"""
22+
23+
def display_file_url(self, obj):
24+
view_name = "%(app_label)s_%(model_name)s_%(field)s" % {
25+
"app_label": self.opts.app_label,
26+
"model_name": self.opts.model_name,
27+
"field": "file",
28+
}
29+
return format_html(
30+
_("<a href='{url}'>{text}</a>"),
31+
url=reverse(f"admin:{view_name}", kwargs={"pk": obj.pk}),
32+
text=obj.file.name,
33+
)
34+
35+
display_file_url.short_description = _("File")
36+
37+
1838
class ActionInlineAdmin(UUIDAdminFirstInOrder, admin.StackedInline):
1939
model = Action
2040
extra = 1
@@ -141,15 +161,17 @@ class _UserAdmin(ImageCroppingMixin, UserAdmin):
141161

142162

143163
@admin.register(Action)
144-
class ActionAdmin(UUIDAdminFirstInOrder, PrivateMediaMixin, admin.ModelAdmin):
164+
class ActionAdmin(
165+
ReadOnlyFileMixin, UUIDAdminFirstInOrder, PrivateMediaMixin, admin.ModelAdmin
166+
):
145167
fields = [
146168
"uuid",
147169
"name",
148170
"description",
149171
"status",
150172
"type",
151173
"end_date",
152-
"file",
174+
"display_file_url",
153175
"is_for",
154176
"created_on",
155177
"updated_on",
@@ -164,7 +186,7 @@ class ActionAdmin(UUIDAdminFirstInOrder, PrivateMediaMixin, admin.ModelAdmin):
164186
"status",
165187
"type",
166188
"end_date",
167-
"file",
189+
"display_file_url",
168190
"is_for",
169191
"created_on",
170192
"updated_on",
@@ -219,22 +241,22 @@ def mark_not_deleted(self, request, queryset):
219241

220242

221243
@admin.register(Document)
222-
class DocumentAdmin(UUIDAdminFirstInOrder, PrivateMediaMixin, admin.ModelAdmin):
223-
fields = ["uuid", "name", "file", "created_on", "plan", "owner"]
224-
readonly_fields = ("uuid", "name", "file", "plan", "preview", "created_on", "owner")
225-
list_display = ("name", "preview", "created_on", "owner")
244+
class DocumentAdmin(
245+
ReadOnlyFileMixin, UUIDAdminFirstInOrder, PrivateMediaMixin, admin.ModelAdmin
246+
):
247+
fields = ["uuid", "name", "display_file_url", "created_on", "plan", "owner"]
248+
readonly_fields = (
249+
"uuid",
250+
"name",
251+
"display_file_url",
252+
"plan",
253+
"created_on",
254+
"owner",
255+
)
256+
list_display = ("name", "display_file_url", "created_on", "owner")
226257
list_filter = ("owner",)
227258
private_media_fields = ("file",)
228259

229-
def preview(self, obj):
230-
return format_html(
231-
_("<a href='{url}'>{text}</a>"),
232-
url=reverse("admin:accounts_document_file", kwargs={"pk": obj.pk}),
233-
text=obj.file.name,
234-
)
235-
236-
preview.short_description = "Preview file"
237-
238260
def has_add_permission(self, request):
239261
return False
240262

@@ -247,7 +269,7 @@ class AppointmentAdmin(UUIDAdminFirstInOrder, admin.ModelAdmin):
247269

248270

249271
@admin.register(Message)
250-
class MessageAdmin(PrivateMediaMixin, admin.ModelAdmin):
272+
class MessageAdmin(ReadOnlyFileMixin, PrivateMediaMixin, admin.ModelAdmin):
251273
fields = (
252274
"uuid",
253275
"sender",
@@ -256,7 +278,7 @@ class MessageAdmin(PrivateMediaMixin, admin.ModelAdmin):
256278
"content",
257279
"seen",
258280
"sent",
259-
"file",
281+
"display_file_url",
260282
)
261283
readonly_fields = (
262284
"uuid",
@@ -266,7 +288,7 @@ class MessageAdmin(PrivateMediaMixin, admin.ModelAdmin):
266288
"content",
267289
"seen",
268290
"sent",
269-
"file",
291+
"display_file_url",
270292
)
271293
list_display = ("sender", "receiver", "created_on", "seen", "sent")
272294
list_filter = ("sender", "receiver")

0 commit comments

Comments
 (0)