fix aldryn_newsblog

This commit is contained in:
bruks 2026-10-01 11:51:55 +01:00
commit b43ca2982d
12 changed files with 67 additions and 39 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -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',
)

View file

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

View file

@ -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
Library.assignment_tag = Library.simple_tag

View file

@ -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'):

View file

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

View file

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

View file

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