From b43ca2982d37b5a23acd9757cf47ff75ff6d9f1a Mon Sep 17 00:00:00 2001 From: Bruksx Date: Thu, 1 Oct 2026 11:51:55 +0100 Subject: [PATCH] fix aldryn_newsblog --- cms/admin/placeholderadmin.py | 8 ++++++++ datacenterlight/cms_models.py | 10 +++++----- digitalglarus/mixins.py | 4 ++-- digitalglarus/models.py | 12 ++++++------ djangocms_blog/models.py | 8 ++++---- dynamicweb/settings/base.py | 28 +++++++++++++++++++--------- hosting/models.py | 10 +++++----- legacy_compat.py | 3 ++- membership/models.py | 6 +++--- nosystemd/models.py | 6 +++--- updated_requirements.txt | 9 +++++++++ utils/models.py | 2 +- 12 files changed, 67 insertions(+), 39 deletions(-) diff --git a/cms/admin/placeholderadmin.py b/cms/admin/placeholderadmin.py index 3f259b43..fbf138b6 100644 --- a/cms/admin/placeholderadmin.py +++ b/cms/admin/placeholderadmin.py @@ -1353,3 +1353,11 @@ class PlaceholderAdmin(BaseEditableAdminMixin, admin.ModelAdmin): } request.current_app = self.admin_site.name return TemplateResponse(request, "admin/cms/page/plugin/delete_confirmation.html", context) + + +class PlaceholderAdminMixin: + """ + Compatibility shim for older third-party packages such as + aldryn-newsblog. + """ + pass \ No newline at end of file diff --git a/datacenterlight/cms_models.py b/datacenterlight/cms_models.py index 7949d79d..dcd88f42 100644 --- a/datacenterlight/cms_models.py +++ b/datacenterlight/cms_models.py @@ -1,6 +1,6 @@ from cms.extensions import PageExtension from cms.extensions.extension_pool import extension_pool -from cms.models.fields import PlaceholderField +from cms.models.fields import PlaceholderField, PlaceholderRelationField from cms.models.pluginmodel import CMSPlugin from django import forms from django.conf import settings @@ -24,13 +24,13 @@ class CMSIntegration(models.Model): 'fetch the Integration into pages' ) ) - footer_placeholder = PlaceholderField( + footer_placeholder = PlaceholderRelationField( 'datacenterlight_footer', related_name='dcl-footer-placeholder+' ) - navbar_placeholder = PlaceholderField( + navbar_placeholder = PlaceholderRelationField( 'datacenterlight_navbar', related_name='dcl-navbar-placeholder+' ) - calculator_placeholder = PlaceholderField( + calculator_placeholder = PlaceholderRelationField( 'datacenterlight_calculator', related_name='dcl-calculator-placeholder+' ) @@ -350,7 +350,7 @@ class DCLCalculatorPluginModel(CMSPlugin): related_name="dcl_custom_pricing_vm_pricing", help_text='Choose a pricing that will be associated with this ' 'Calculator', - on_delete=models.SET_NULL + on_delete=models.SET_NULL, null=True, ) vm_type = models.CharField( max_length=50, choices=VMTemplate.VM_TYPE_CHOICES, diff --git a/digitalglarus/mixins.py b/digitalglarus/mixins.py index 81f97aeb..cf35cbb1 100644 --- a/digitalglarus/mixins.py +++ b/digitalglarus/mixins.py @@ -33,9 +33,9 @@ class IsNotMemberMixin(object): class Ordereable(models.Model): - customer = models.ForeignKey(StripeCustomer, on_delete=models.SET_NULL) + customer = models.ForeignKey(StripeCustomer, on_delete=models.SET_NULL, null=True,) amount = models.FloatField() - billing_address = models.ForeignKey(BillingAddress, on_delete=models.SET_NULL) + billing_address = models.ForeignKey(BillingAddress, on_delete=models.SET_NULL, null=True,) created_at = models.DateTimeField(auto_now_add=True) approved = models.BooleanField(default=False) last4 = models.CharField(max_length=4, blank=True) diff --git a/digitalglarus/models.py b/digitalglarus/models.py index fa21eb46..db48b81a 100644 --- a/digitalglarus/models.py +++ b/digitalglarus/models.py @@ -72,7 +72,7 @@ class MembershipType(models.Model): class Membership(models.Model): - type = models.ForeignKey(MembershipType, on_delete=models.SET_NULL) + type = models.ForeignKey(MembershipType, on_delete=models.SET_NULL, null=True,) active = models.BooleanField(default=True) start_date = models.DateField() end_date = models.DateField() @@ -141,7 +141,7 @@ class Membership(models.Model): class MembershipOrder(Ordereable, models.Model): - membership = models.ForeignKey(Membership, on_delete=models.SET_NULL) + membership = models.ForeignKey(Membership, on_delete=models.SET_NULL, null=True) start_date = models.DateField() end_date = models.DateField() stripe_subscription_id = models.CharField(max_length=100, null=True) @@ -268,7 +268,7 @@ class BookingOrder(Ordereable, models.Model): (CANCELLED, 'Cancelled') ) - booking = models.OneToOneField(Booking, on_delete=models.SET_NULL) + booking = models.OneToOneField(Booking, on_delete=models.SET_NULL, null=True) original_price = models.FloatField() special_month_price = models.FloatField() status = models.PositiveIntegerField(choices=STATUS_CHOICES, default=1) @@ -297,7 +297,7 @@ class BookingOrder(Ordereable, models.Model): class BookingCancellation(models.Model): - order = models.ForeignKey(BookingOrder, on_delete=models.SET_NULL) + order = models.ForeignKey(BookingOrder, on_delete=models.SET_NULL, null=True) created_at = models.DateTimeField(auto_now=True) required_refund = models.BooleanField(default=True) refund = models.BooleanField(default=False) @@ -337,7 +337,7 @@ class DGGallery(models.Model): class DGPicture(models.Model): - gallery = models.ForeignKey(DGGallery, on_delete=models.SET_NULL) + gallery = models.ForeignKey(DGGallery, on_delete=models.SET_NULL, null=True,) image = FilerImageField(related_name='dg_gallery') description = models.CharField(max_length=60) @@ -346,7 +346,7 @@ class DGPicture(models.Model): class DGGalleryPlugin(CMSPlugin): - dgGallery = models.ForeignKey(DGGallery, on_delete=models.SET_NULL) + dgGallery = models.ForeignKey(DGGallery, on_delete=models.SET_NULL, null=True,) class DGSupportersPlugin(CMSPlugin): diff --git a/djangocms_blog/models.py b/djangocms_blog/models.py index aa203f23..0e707b1b 100644 --- a/djangocms_blog/models.py +++ b/djangocms_blog/models.py @@ -3,7 +3,7 @@ import hashlib from aldryn_apphooks_config.fields import AppHookConfigField from aldryn_apphooks_config.managers.parler import AppHookConfigTranslatableManager from cms.models import CMSPlugin -from cms.models.fields import PlaceholderField +from cms.models.fields import PlaceholderField, PlaceholderRelationField from django.conf import settings as dj_settings from django.contrib.auth import get_user_model from django.contrib.sites.shortcuts import get_current_site @@ -268,9 +268,9 @@ class Post(KnockerModel, BlogMetaMixin, TranslatableModel): post_text=HTMLField(_("text"), default="", blank=True, configuration="BLOG_POST_TEXT_CKEDITOR"), meta={"unique_together": (("language_code", "slug"),)}, ) - media = PlaceholderField("media", related_name="media") - content = PlaceholderField("post_content", related_name="post_content") - liveblog = PlaceholderField("live_blog", related_name="live_blog") + media = PlaceholderRelationField("media", related_name="media") + content = PlaceholderRelationField("post_content", related_name="post_content") + liveblog = PlaceholderRelationField("live_blog", related_name="live_blog") enable_liveblog = models.BooleanField(verbose_name=_("enable liveblog on post"), default=False) objects = GenericDateTaggedManager() diff --git a/dynamicweb/settings/base.py b/dynamicweb/settings/base.py index 198e50a2..525d9f03 100644 --- a/dynamicweb/settings/base.py +++ b/dynamicweb/settings/base.py @@ -110,12 +110,12 @@ INSTALLED_APPS = ( 'filer', 'djangocms_blog', 'cms', # django CMS itself - #TODO'aldryn_apphooks_config', - #TODO'aldryn_boilerplates', - #TODO'aldryn_categories', - #TODO'aldryn_common', - #TODO'aldryn_newsblog', - #TODO'aldryn_people', + 'aldryn_apphooks_config', + 'aldryn_boilerplates', + 'aldryn_categories', + 'aldryn_common', + 'aldryn_newsblog', + 'aldryn_people', #TODO'aldryn_reversion', #TODO'aldryn_translation_tools', 'treebeard', # utilities for implementing a tree @@ -125,7 +125,7 @@ INSTALLED_APPS = ( # 2nd migrate # django-cms plugins - #TODO'djangocms_file', + 'djangocms_file', #TODO'djangocms_picture', #TODO'djangocms_video', #TODO'django_recaptcha', @@ -158,23 +158,33 @@ INSTALLED_APPS = ( 'opennebula_api', 'django_celery_results', 'webhook', + + 'django.contrib.postgres', ) -MIDDLEWARE_CLASSES = ( +MIDDLEWARE = ( 'django.contrib.sessions.middleware.SessionMiddleware', + 'utils.middleware.MultipleProxyMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'django.middleware.locale.LocaleMiddleware', + # django-cms middlewares 'cms.middleware.user.CurrentUserMiddleware', 'cms.middleware.page.CurrentPageMiddleware', 'cms.middleware.toolbar.ToolbarMiddleware', 'cms.middleware.language.LanguageCookieMiddleware', + 'multisite.middleware.DynamicSiteMiddleware', 'djangocms_multisite.middleware.CMSMultiSiteMiddleware', ) diff --git a/hosting/models.py b/hosting/models.py index e3b5d6c5..47b3a7b3 100644 --- a/hosting/models.py +++ b/hosting/models.py @@ -238,8 +238,8 @@ class UserHostingKey(models.Model): class HostingBill(AssignPermissionsMixin, models.Model): - customer = models.ForeignKey(StripeCustomer, on_delete=models.SET_NULL) - billing_address = models.ForeignKey(BillingAddress, on_delete=models.SET_NULL) + customer = models.ForeignKey(StripeCustomer, on_delete=models.SET_NULL, null=True,) + billing_address = models.ForeignKey(BillingAddress, on_delete=models.SET_NULL, null=True,) total_price = models.FloatField(default=0.0) permissions = ('view_hostingbill',) @@ -263,8 +263,8 @@ class MonthlyHostingBill(AssignPermissionsMixin, models.Model): """ Corresponds to Invoice object of Stripe """ - customer = models.ForeignKey(StripeCustomer, on_delete=models.SET_NULL) - order = models.ForeignKey(HostingOrder, on_delete=models.SET_NULL) + customer = models.ForeignKey(StripeCustomer, on_delete=models.SET_NULL, null=True,) + order = models.ForeignKey(HostingOrder, on_delete=models.SET_NULL, null=True,) created = models.DateTimeField(help_text="When the invoice was created") receipt_number = models.CharField( help_text="The receipt number that is generated on Stripe", @@ -554,7 +554,7 @@ class HostingBillLineItem(AssignPermissionsMixin, models.Model): class VMDetail(models.Model): - user = models.ForeignKey(CustomUser, on_delete=models.SET_NULL) + user = models.ForeignKey(CustomUser, on_delete=models.SET_NULL, null=True,) vm_id = models.IntegerField(default=0) disk_size = models.FloatField(default=0.0) cores = models.FloatField(default=0.0) diff --git a/legacy_compat.py b/legacy_compat.py index adac4be3..b91ff8f6 100644 --- a/legacy_compat.py +++ b/legacy_compat.py @@ -527,4 +527,5 @@ import django.template.library from django.template.library import Library if not hasattr(Library, "assignment_tag"): - Library.assignment_tag = Library.simple_tag \ No newline at end of file + Library.assignment_tag = Library.simple_tag + diff --git a/membership/models.py b/membership/models.py index a4ac2936..81ab8731 100644 --- a/membership/models.py +++ b/membership/models.py @@ -113,7 +113,7 @@ def validate_name(value): class CustomUser(AbstractBaseUser, PermissionsMixin): VALIDATED_CHOICES = ((0, 'Not validated'), (1, 'Validated')) - site = models.ForeignKey(Site, default=1, on_delete=models.SET_NULL) + site = models.ForeignKey(Site, default=1, on_delete=models.SET_NULL, null=True,) name = models.CharField(max_length=50, validators=[validate_name]) email = models.EmailField(unique=True) username = models.CharField(max_length=60, unique=True, null=True) @@ -270,7 +270,7 @@ class CustomUser(AbstractBaseUser, PermissionsMixin): class StripeCustomer(models.Model): - user = models.OneToOneField(CustomUser, on_delete=models.SET_NULL) + user = models.OneToOneField(CustomUser, on_delete=models.SET_NULL, null=True,) stripe_id = models.CharField(unique=True, max_length=100) def __str__(self): @@ -362,7 +362,7 @@ class DeletedUser(models.Model): class Calendar(models.Model): datebooked = models.DateField() - user = models.ForeignKey(CustomUser, on_delete=models.SET_NULL) + user = models.ForeignKey(CustomUser, on_delete=models.SET_NULL, null=True,) def __init__(self, *args, **kwargs): if kwargs.get('datebooked'): diff --git a/nosystemd/models.py b/nosystemd/models.py index 1a8667e2..bf0f1454 100644 --- a/nosystemd/models.py +++ b/nosystemd/models.py @@ -11,7 +11,7 @@ class DonatorStatus(models.Model): (ACTIVE, 'Active'), (CANCELED, 'Canceled') ) - user = models.OneToOneField(CustomUser, on_delete=models.SET_NULL) + user = models.OneToOneField(CustomUser, on_delete=models.SET_NULL, null=True,) status = models.CharField(choices=STATUS_CHOICES, max_length=10, default=ACTIVE) def __str__(self): @@ -29,9 +29,9 @@ class DonatorStatus(models.Model): class Donation(models.Model): donation = models.FloatField() - donator = models.ForeignKey(StripeCustomer, on_delete=models.SET_NULL) + donator = models.ForeignKey(StripeCustomer, on_delete=models.SET_NULL, null=True,) created_at = models.DateTimeField(auto_now_add=True) - billing_address = models.ForeignKey(BillingAddress, on_delete=models.SET_NULL) + billing_address = models.ForeignKey(BillingAddress, on_delete=models.SET_NULL, null=True,) last4 = models.CharField(max_length=4) cc_brand = models.CharField(max_length=10) stripe_charge_id = models.CharField(max_length=100, null=True) diff --git a/updated_requirements.txt b/updated_requirements.txt index 54cb6650..4249e140 100644 --- a/updated_requirements.txt +++ b/updated_requirements.txt @@ -1,6 +1,10 @@ aldryn-apphooks-config==0.7.0 aldryn-boilerplates==0.8.0 +aldryn-categories==1.2.0 aldryn-common==1.0.5 +aldryn-newsblog==2.2.1 +aldryn-people==2.2.0 +aldryn-translation-tools==0.3.0 amqp==5.4.0 asgiref==3.12.1 babel==2.18.0 @@ -19,6 +23,7 @@ django-appconf==1.2.0 django-appdata==0.4.0 django-bootstrap3==26.2 django-classy-tags==0.8.0 +django-cms==5.1.3 django-debug-toolbar==8.0.0 django-filer==3.6.0 django-formtools==2.1 @@ -44,6 +49,9 @@ django-treebeard==4.3.1 django_celery_results==2.6.0 django_compressor==4.6.0 djangocms-admin-style==3.3.1 +djangocms-apphook-setup==0.5.1 +djangocms-attributes-field==4.1.2 +djangocms-file==4.0.1 djangocms-multisite==0.3.1 djangocms-text-ckeditor==5.1.7 djangorestframework==3.18.1 @@ -53,6 +61,7 @@ idna==3.20 kombu==5.6.2 ldap3==2.9.1 lxml==6.1.3 +lxml_html_clean==0.4.5 oca @ git+https://github.com/ungleich/python-oca.git@9bbda45683736a608c99d5e4bff65e50c93f734f packaging==26.3 phonenumbers==9.0.40 diff --git a/utils/models.py b/utils/models.py index be5eedc7..1bbe711d 100644 --- a/utils/models.py +++ b/utils/models.py @@ -40,7 +40,7 @@ class BillingAddress(BaseBillingAddress): class UserBillingAddress(BaseBillingAddress): - user = models.ForeignKey(CustomUser, related_name='billing_addresses', on_delete=models.SET_NULL) + user = models.ForeignKey(CustomUser, related_name='billing_addresses', on_delete=models.SET_NULL, null=True) current = models.BooleanField(default=True) def __str__(self):