MAKENTNU/web

View on GitHub
src/announcements/views.py

Summary

Maintainability
A
1 hr
Test Coverage
from abc import ABC

from django.contrib.auth.mixins import PermissionRequiredMixin
from django.urls import reverse_lazy
from django.utils.translation import gettext_lazy as _
from django.views.generic import CreateView, DeleteView, ListView, UpdateView

from util.view_utils import CustomFieldsetFormMixin, PreventGetRequestsMixin
from .forms import AnnouncementForm
from .models import Announcement


class AdminAnnouncementListView(PermissionRequiredMixin, ListView):
    permission_required = ('announcements.change_announcement',)
    model = Announcement
    queryset = Announcement.objects.order_by('-display_from')
    template_name = 'announcements/admin_announcement_list.html'
    context_object_name = "announcements"


class AnnouncementFormMixin(CustomFieldsetFormMixin, ABC):
    model = Announcement
    form_class = AnnouncementForm
    success_url = reverse_lazy('admin_announcement_list')

    narrow = False
    centered_title = False
    back_button_link = success_url
    back_button_text = _("Admin page for announcements")
    custom_fieldsets = [
        {'fields': ('classification', 'link'), 'layout_class': "ui two fields"},
        {'fields': ('display_from', 'display_to'), 'layout_class': "ui two fields"},
        {'fields': ('content', 'site_wide')},
    ]


class AnnouncementCreateView(PermissionRequiredMixin, AnnouncementFormMixin, CreateView):
    permission_required = ('announcements.add_announcement',)

    form_title = _("Add Announcement")
    save_button_text = _("Add")


class AnnouncementUpdateView(PermissionRequiredMixin, AnnouncementFormMixin, UpdateView):
    permission_required = ('announcements.change_announcement',)

    form_title = _("Change Announcement")


class AnnouncementDeleteView(PermissionRequiredMixin, PreventGetRequestsMixin, DeleteView):
    permission_required = ('announcements.delete_announcement',)
    model = Announcement
    success_url = reverse_lazy('admin_announcement_list')