Make sure that cache is always cleaned while performing an update

This commit is contained in:
2025-12-30 21:53:04 +01:00
parent 8087ab5997
commit ee775d737e
2 changed files with 46 additions and 41 deletions

View File

@@ -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"
)

View File

@@ -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]