Files
fet2020/fet2020/posts/admin.py
2023-11-21 18:55:08 +00:00

230 lines
5.3 KiB
Python

from django.contrib import admin, messages
from documents.api import create_pad
from .forms import EventForm, FetMeetingForm, NewsForm, PostForm
from .models import Event, FetMeeting, FileUpload, News, Post
@admin.action(description="In eine Fachschaftssitzung konvertieren")
def make_fetmeeting(self, request, queryset):
qs = self.get_queryset(request).filter(id=request.POST["_selected_action"]).first()
agenda_key = create_pad(qs.slug + "-agenda")
if not agenda_key:
self.message_user(
request,
"Das Agenda konnte nicht erstellt werden.",
messages.ERROR,
)
return
protocol_key = create_pad(qs.slug + "-protocol")
if not protocol_key:
self.message_user(
request,
"Das Protokoll konnte nicht erstellt werden.",
messages.ERROR,
)
return
queryset.update(
post_type="F",
has_agenda=True,
has_protocol=True,
agenda_key=agenda_key,
protocol_key=protocol_key,
)
self.message_user(
request,
"Das Event qs.title wurde erfolgreich in eine FET Sitzung konvertiert.",
messages.SUCCESS,
)
class FileUploadInline(admin.TabularInline):
model = FileUpload
extra = 0
verbose_name = "Datei"
verbose_name_plural = "Dateien"
class PostAdmin(admin.ModelAdmin):
form = PostForm
model = Post
list_display = ["title", "slug", "public_date", "status", "is_pinned"]
list_filter = ["is_pinned", "status"]
ordering = ["-public_date"]
save_as = True
def add_view(self, request, form_url="", extra_context=None):
extra_context = extra_context or {}
extra_context["help_text"] = "Fette Schriften sind Pflichtfelder."
return super().add_view(
request,
form_url,
extra_context=extra_context,
)
def change_view(self, request, object_id, form_url="", extra_context=None):
extra_context = extra_context or {}
extra_context["help_text"] = "Fette Schriften sind Pflichtfelder."
return super().change_view(
request,
object_id,
form_url,
extra_context=extra_context,
)
def save_model(self, request, obj, form, change):
if obj.author is None:
obj.author = request.user
super().save_model(request, obj, form, change)
class Media:
css = {
"all": [
"jquery-ui/jquery-ui.min.css",
"jquery-ui/ui-lightness/theme.css",
]
}
js = [
"jquery-ui/jquery-ui.min.js",
]
@admin.register(News)
class NewsAdmin(PostAdmin):
form = NewsForm
model = News
fieldsets = (
(
None,
{
"fields": (
"title",
"subtitle",
"tags",
)
},
),
(
"Status",
{
"fields": (
"status",
"is_pinned",
)
},
),
(
"Bericht",
{
"fields": (
"image",
"body",
)
},
),
(
"Veröffentlichung",
{
"fields": (
"slug",
"author",
"public_date",
)
},
),
)
inlines = (FileUploadInline,)
@admin.register(Event)
class EventAdmin(PostAdmin):
form = EventForm
model = Event
actions = [make_fetmeeting]
list_display = ["title", "slug", "event_start", "status", "is_pinned"]
list_filter = ["is_pinned", "status"]
ordering = ["-event_start"]
fieldsets = (
(
None,
{
"fields": (
"title",
"subtitle",
"tags",
)
},
),
(
"Status",
{
"fields": (
"status",
"is_pinned",
)
},
),
(
"Termin Details",
{
"fields": (
"event_start",
"event_end",
"event_place",
)
},
),
(
"Bericht",
{
"fields": (
"image",
"body",
)
},
),
(
"Veröffentlichung",
{
"fields": (
"slug",
"author",
"public_date",
)
},
),
)
@admin.register(FetMeeting)
class FetMeetingAdmin(EventAdmin):
form = FetMeetingForm
model = FetMeeting
actions = []
list_display = ["title", "slug", "event_start"]
list_filter = []
fieldsets = (
(
None,
{
"fields": (
"event_start",
"event_end",
"event_place",
"tags",
)
},
),
)