takahe/users/views/admin/announcements.py

88 wiersze
2.4 KiB
Python

from django import forms
from django.utils.decorators import method_decorator
from django.views.generic import CreateView, DeleteView, ListView, UpdateView
from users.decorators import admin_required
from users.models import Announcement
from users.views.admin.generic import HTMXActionView
@method_decorator(admin_required, name="dispatch")
class AnnouncementsRoot(ListView):
template_name = "admin/announcements.html"
paginate_by = 30
def get(self, request, *args, **kwargs):
self.extra_context = {
"section": "announcements",
}
return super().get(request, *args, **kwargs)
def get_queryset(self):
reports = Announcement.objects.order_by("created")
return reports
@method_decorator(admin_required, name="dispatch")
class AnnouncementCreate(CreateView):
model = Announcement
template_name = "admin/announcement_create.html"
extra_context = {"section": "announcements"}
success_url = Announcement.urls.admin_root
class form_class(forms.ModelForm):
class Meta:
model = Announcement
fields = ["text", "published", "start", "end"]
widgets = {
"published": forms.Select(
choices=[(True, "Published"), (False, "Draft")]
)
}
@method_decorator(admin_required, name="dispatch")
class AnnouncementEdit(UpdateView):
model = Announcement
template_name = "admin/announcement_edit.html"
extra_context = {"section": "announcements"}
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["page"] = self.request.GET.get("page")
return context
class form_class(AnnouncementCreate.form_class):
pass
@method_decorator(admin_required, name="dispatch")
class AnnouncementDelete(DeleteView):
model = Announcement
template_name = "admin/announcement_delete.html"
success_url = Announcement.urls.admin_root
class AnnouncementPublish(HTMXActionView):
"""
Marks the announcement as published.
"""
model = Announcement
def action(self, announcement: Announcement):
announcement.published = True
announcement.save()
class AnnouncementUnpublish(HTMXActionView):
"""
Marks the announcement as unpublished.
"""
model = Announcement
def action(self, announcement: Announcement):
announcement.published = False
announcement.save()