From 374f6f762e40720edbc2b981c1b111d9bed02fd0 Mon Sep 17 00:00:00 2001 From: Stefan Wehrmeyer Date: Sat, 24 May 2025 07:52:54 +0200 Subject: [PATCH] Replace deprecated PlaceholderField --- froide_govplan/admin.py | 5 +---- ..._governmentplansection_content_placeholder.py | 16 ++++++++++++++++ froide_govplan/models.py | 14 ++++++++++---- 3 files changed, 27 insertions(+), 8 deletions(-) create mode 100644 froide_govplan/migrations/0014_remove_governmentplansection_content_placeholder.py diff --git a/froide_govplan/admin.py b/froide_govplan/admin.py index 36dd892..3e3f951 100644 --- a/froide_govplan/admin.py +++ b/froide_govplan/admin.py @@ -1,5 +1,4 @@ from adminsortable2.admin import SortableAdminMixin -from cms.admin.placeholderadmin import PlaceholderAdminMixin from django.contrib import admin, auth from django.contrib.auth.models import Group from django.shortcuts import get_object_or_404, redirect, render @@ -330,9 +329,7 @@ class GovernmentPlanUpdateAdmin(admin.ModelAdmin): return super().has_change_permission(request, obj=obj) -class GovernmentPlanSectionAdmin( - SortableAdminMixin, PlaceholderAdminMixin, admin.ModelAdmin -): +class GovernmentPlanSectionAdmin(SortableAdminMixin, admin.ModelAdmin): save_on_top = True prepopulated_fields = {"slug": ("title",)} search_fields = ("title",) diff --git a/froide_govplan/migrations/0014_remove_governmentplansection_content_placeholder.py b/froide_govplan/migrations/0014_remove_governmentplansection_content_placeholder.py new file mode 100644 index 0000000..a54cec2 --- /dev/null +++ b/froide_govplan/migrations/0014_remove_governmentplansection_content_placeholder.py @@ -0,0 +1,16 @@ +# Generated by Django 5.2.1 on 2025-05-24 05:52 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("froide_govplan", "0013_government_active"), + ] + + operations = [ + migrations.RemoveField( + model_name="governmentplansection", + name="content_placeholder", + ), + ] diff --git a/froide_govplan/models.py b/froide_govplan/models.py index 2a7a93c..14043e5 100644 --- a/froide_govplan/models.py +++ b/froide_govplan/models.py @@ -9,6 +9,7 @@ from django.contrib.postgres.search import SearchQuery, SearchRank, SearchVector from django.db import models from django.urls import reverse from django.utils import timezone +from django.utils.functional import cached_property from django.utils.translation import gettext_lazy as _ from filer.fields.image import FilerImageField from froide.follow.models import Follower @@ -22,11 +23,12 @@ from . import conf from .utils import make_request_url try: - from cms.models.fields import PlaceholderField + from cms.models.fields import PlaceholderRelationField + from cms.utils.placeholder import get_placeholder_from_slot from cms.models.pluginmodel import CMSPlugin except ImportError: CMSPlugin = None - PlaceholderField = None + PlaceholderRelationField = None if conf.GOVPLAN_ENABLE_FOIREQUEST: @@ -453,8 +455,8 @@ class GovernmentPlanSection(models.Model): order = models.PositiveIntegerField(default=0) featured = models.DateTimeField(null=True, blank=True) - if PlaceholderField: - content_placeholder = PlaceholderField("content") + if PlaceholderRelationField: + placeholders = PlaceholderRelationField() class Meta: verbose_name = _("Government plan section") @@ -476,6 +478,10 @@ class GovernmentPlanSection(models.Model): def get_absolute_domain_url(self): return settings.SITE_URL + self.get_absolute_url() + @cached_property + def content_placeholder(self): + return get_placeholder_from_slot(self.placeholders, "content") + def get_plans(self, queryset=None): if queryset is None: queryset = GovernmentPlan.objects.filter(public=True)