dynamicweb/cms/models/placeholderpluginmodel.py

42 lines
1.2 KiB
Python

from functools import cached_property
from django.db import models
from cms.models import CMSPlugin
from cms.models.fields import PlaceholderRelationField
from cms.utils.placeholder import get_placeholder_from_slot
class PlaceholderReference(CMSPlugin):
cmsplugin_ptr = models.OneToOneField(
CMSPlugin,
on_delete=models.CASCADE,
related_name='cms_placeholderreference',
parent_link=True,
)
name = models.CharField(max_length=255)
placeholders = PlaceholderRelationField()
@cached_property
def placeholder_ref(self):
placeholder = get_placeholder_from_slot(self.placeholders, "clipboard")
placeholder.source = self
return placeholder
class Meta:
app_label = 'cms'
def __str__(self):
return self.name
def move_to(self, placeholder, language):
for plugin in self.placeholder_ref.get_plugins():
plugin.placeholder = placeholder
plugin.language = language
plugin.save()
def move_from(self, placeholder, language):
for plugin in placeholder.get_plugins():
plugin.placeholder = self.placeholder_ref
plugin.language = language
plugin.save()