membershipworks: Improve EventExt admin

This commit is contained in:
Adam Goldsmith 2024-01-02 10:54:29 -05:00
parent f2332dbe37
commit fbdfb47e60

View File

@ -1,5 +1,6 @@
from django.contrib import admin from django.contrib import admin
from django.contrib.humanize.templatetags.humanize import naturaltime from django.contrib.humanize.templatetags.humanize import naturaltime
from django.utils.html import format_html
from django_object_actions import DjangoObjectActions, action from django_object_actions import DjangoObjectActions, action
from django_q.tasks import async_task from django_q.tasks import async_task
@ -107,27 +108,45 @@ class EventAdmin(admin.ModelAdmin):
list_display = [ list_display = [
"title", "title",
"start", "start",
"end",
"duration", "duration",
"count", "count",
"cap", "cap",
"category", "category",
"venue",
] ]
list_filter = ["category", "calendar", "venue"] list_filter = [
"category",
"calendar",
"venue",
("materials_fee", admin.EmptyFieldListFilter),
]
show_facets = admin.ShowFacets.ALWAYS show_facets = admin.ShowFacets.ALWAYS
search_fields = ["eid", "title", "url"] search_fields = ["eid", "title", "url"]
date_hierarchy = "start" date_hierarchy = "start"
readonly_fields = [
field.name
for field in Event._meta.get_fields()
if not (field.auto_created or field.many_to_many or not field.concrete)
] + ["duration"]
@admin.display() @property
def readonly_fields(self):
fields = []
for field in Event._meta.get_fields():
if field.auto_created or field.many_to_many or not field.concrete:
continue
elif field.name == "url":
fields.append("_url")
else:
fields.append(field.name)
fields.insert(fields.index("end") + 1, "duration")
return fields
@admin.display(ordering="duration")
def duration(self, obj): def duration(self, obj):
return obj.duration return obj.duration
@admin.display(description="URL")
def _url(self, obj):
return format_html(
'<a href="https://claremontmakerspace.org/events/#!event/{0}">{0}</a>',
obj.url,
)
def has_add_permission(self, request, obj=None): def has_add_permission(self, request, obj=None):
return False return False