bornhack-website/src/program/admin.py

123 lines
3.0 KiB
Python
Raw Normal View History

2019-06-16 12:32:24 +00:00
from django.contrib import admin, messages
from django.core.exceptions import ValidationError
2016-07-13 17:13:47 +00:00
from .models import (
Event,
EventInstance,
EventLocation,
EventProposal,
EventTrack,
EventType,
Favorite,
Speaker,
SpeakerProposal,
2019-06-16 12:32:24 +00:00
Url,
UrlType,
)
2017-03-12 14:43:41 +00:00
@admin.register(SpeakerProposal)
class SpeakerProposalAdmin(admin.ModelAdmin):
def mark_speakerproposal_as_approved(self, request, queryset):
for sp in queryset:
sp.mark_as_approved(request)
2019-06-16 12:32:24 +00:00
mark_speakerproposal_as_approved.description = (
"Approve and create Speaker object(s)"
)
actions = ["mark_speakerproposal_as_approved"]
list_filter = ("camp", "proposal_status", "user")
2017-03-12 14:43:41 +00:00
def get_speakers_string(event_proposal):
2019-06-16 12:32:24 +00:00
return ", ".join(event_proposal.speakers.all().values_list("email", flat=True))
get_speakers_string.short_description = "Speakers"
@admin.register(EventProposal)
class EventProposalAdmin(admin.ModelAdmin):
def mark_eventproposal_as_approved(self, request, queryset):
for ep in queryset:
if not ep.speakers.all():
messages.error(
2019-06-16 12:32:24 +00:00
request, "Event cant be approved as it has no speaker(s)."
)
return False
else:
try:
ep.mark_as_approved(request)
except ValidationError as e:
messages.error(request, e)
return False
2019-06-16 12:32:24 +00:00
mark_eventproposal_as_approved.description = "Approve and create Event object(s)"
def get_speakers(self):
return
2019-06-16 12:32:24 +00:00
actions = ["mark_eventproposal_as_approved"]
list_filter = ("event_type", "proposal_status", "track", "user")
list_display = ["title", get_speakers_string, "event_type", "proposal_status"]
@admin.register(EventLocation)
class EventLocationAdmin(admin.ModelAdmin):
2019-06-16 12:32:24 +00:00
list_filter = ("camp",)
list_display = ("name", "camp")
2016-07-13 19:44:09 +00:00
@admin.register(EventTrack)
class EventTrackAdmin(admin.ModelAdmin):
2019-06-16 12:32:24 +00:00
list_filter = ("camp",)
list_display = ("name", "camp")
@admin.register(EventInstance)
class EventInstanceAdmin(admin.ModelAdmin):
2019-06-16 12:32:24 +00:00
list_display = ("event", "when", "location")
list_filter = ("event__track__camp", "event")
search_fields = ["event__title"]
2016-07-13 19:44:09 +00:00
@admin.register(EventType)
class EventTypeAdmin(admin.ModelAdmin):
pass
@admin.register(Speaker)
class SpeakerAdmin(admin.ModelAdmin):
2019-06-16 12:32:24 +00:00
list_filter = ("camp",)
readonly_fields = ["proposal"]
2017-04-16 00:10:24 +00:00
@admin.register(Favorite)
class FavoriteAdmin(admin.ModelAdmin):
2019-06-16 12:32:24 +00:00
raw_id_fields = ("event_instance",)
2017-04-16 00:10:24 +00:00
class SpeakerInline(admin.StackedInline):
model = Speaker.events.through
2016-07-13 19:44:09 +00:00
@admin.register(Event)
class EventAdmin(admin.ModelAdmin):
2019-06-16 12:32:24 +00:00
list_filter = ("track", "speakers")
list_display = ["title", "event_type"]
inlines = [SpeakerInline]
2016-07-13 20:37:20 +00:00
2019-06-16 12:32:24 +00:00
readonly_fields = ["proposal"]
@admin.register(UrlType)
class UrlTypeAdmin(admin.ModelAdmin):
pass
2019-06-16 12:32:24 +00:00
@admin.register(Url)
class UrlAdmin(admin.ModelAdmin):
pass