diff --git a/ram/ram/admin.py b/ram/ram/admin.py index 8c85cfc..234fb26 100644 --- a/ram/ram/admin.py +++ b/ram/ram/admin.py @@ -1,22 +1,60 @@ -from django.contrib import admin from django.conf import settings +from django.contrib import admin +from django.core.cache import cache admin.site.site_header = settings.SITE_NAME def publish(modeladmin, request, queryset): - for obj in queryset: - obj.published = True - obj.save() + queryset.update(published=True) + cache.clear() publish.short_description = "Publish selected items" def unpublish(modeladmin, request, queryset): - for obj in queryset: - obj.published = False - obj.save() + queryset.update(published=False) + cache.clear() unpublish.short_description = "Unpublish selected items" + + +def set_featured(modeladmin, request, queryset): + count = queryset.count() + if count > settings.FEATURED_ITEMS_MAX: + modeladmin.message_user( + request, + "You can only mark up to {} items as featured.".format( + settings.FEATURED_ITEMS_MAX + ), + level="error", + ) + return + featured = modeladmin.model.objects.filter(featured=True).count() + if featured + count > settings.FEATURED_ITEMS_MAX: + modeladmin.message_user( + request, + "There are already {} featured items. You can only mark {} more items as featured.".format( # noqa: E501 + featured, + settings.FEATURED_ITEMS_MAX - featured, + ), + level="error", + ) + return + queryset.update(featured=True) + cache.clear() + + +set_featured.short_description = "Mark selected items as featured" + + +def unset_featured(modeladmin, request, queryset): + queryset.update(featured=False) + cache.clear() + + +unset_featured.short_description = ( + "Unmark selected items as featured" +) diff --git a/ram/roster/admin.py b/ram/roster/admin.py index 38cbbd3..a0329c6 100644 --- a/ram/roster/admin.py +++ b/ram/roster/admin.py @@ -6,8 +6,8 @@ from django.utils.html import format_html, format_html_join, strip_tags from adminsortable2.admin import SortableAdminBase, SortableInlineAdminMixin -from ram.admin import publish, unpublish from ram.utils import generate_csv +from ram.admin import publish, unpublish, set_featured, unset_featured from repository.models import RollingStockDocument from portal.utils import get_site_conf from roster.models import ( @@ -303,37 +303,4 @@ class RollingStockAdmin(SortableAdminBase, admin.ModelAdmin): download_csv.short_description = "Download selected items as CSV" - def set_featured(modeladmin, request, queryset): - count = queryset.count() - if count > settings.FEATURED_ITEMS_MAX: - modeladmin.message_user( - request, - "You can only mark up to {} items as featured.".format( - settings.FEATURED_ITEMS_MAX - ), - level="error", - ) - return - featured = RollingStock.objects.filter(featured=True).count() - if featured + count > settings.FEATURED_ITEMS_MAX: - modeladmin.message_user( - request, - "There are already {} featured items. You can only mark {} more items as featured.".format( # noqa: E501 - featured, - settings.FEATURED_ITEMS_MAX - featured, - ), - level="error", - ) - return - queryset.update(featured=True) - - set_featured.short_description = "Mark selected rolling stock as featured" - - def unset_featured(modeladmin, request, queryset): - queryset.update(featured=False) - - unset_featured.short_description = ( - "Unmark selected rolling stock as featured" - ) - actions = [publish, unpublish, set_featured, unset_featured, download_csv]