link page -> placeholders refactored
This commit is contained in:
parent
b1c47a1c49
commit
45d28617db
|
@ -6,10 +6,9 @@ from django.core.serializers.json import DjangoJSONEncoder
|
|||
from cms.models import Page, CMSPlugin, Placeholder, Title
|
||||
from cms.models.managers import PageManager
|
||||
from django.core import serializers
|
||||
from pprint import pprint
|
||||
|
||||
exclude_attrs = {'Page': ('site',),
|
||||
'Placeholder': (),
|
||||
exclude_attrs = {'Page': ('site', 'id'),
|
||||
'Placeholder': ('id', ),
|
||||
'CMSPlugin': (),
|
||||
'Title': ()
|
||||
}
|
||||
|
@ -39,7 +38,10 @@ class Command(BaseCommand):
|
|||
)
|
||||
|
||||
def _serialize(self, data):
|
||||
return serializers.serialize('python', data, use_natural_keys=True)
|
||||
model_name = data.__class__.__name__
|
||||
model_fields = [field[0].name for field in data._meta.get_fields_with_model()]
|
||||
fields = set(model_fields) - set(exclude_attrs[model_name])
|
||||
return serializers.serialize('python', (data,), use_natural_keys=True, fields=fields)
|
||||
|
||||
def serialize_page(self, page):
|
||||
"""
|
||||
|
@ -47,7 +49,7 @@ class Command(BaseCommand):
|
|||
"""
|
||||
title = page.title_set.get(language=self.options['lang'])
|
||||
placeholders = page.placeholders.all()
|
||||
data = self._serialize((page, title)) + self.serialize_placeholders(placeholders)
|
||||
data = self._serialize(page) + self._serialize(title) + self.serialize_placeholders(placeholders)
|
||||
for child in page.children.all():
|
||||
data += self.serialize_page(child)
|
||||
return data
|
||||
|
@ -56,18 +58,21 @@ class Command(BaseCommand):
|
|||
"""
|
||||
serialize placeholders and their attached plugins
|
||||
"""
|
||||
data = self._serialize(placeholders)
|
||||
data = []
|
||||
|
||||
for placeholder in placeholders:
|
||||
data += self.serialize_plugins(placeholder.cmsplugin_set.all())
|
||||
[serialized_placeholder] = self._serialize(placeholder)
|
||||
serialized_placeholder['fields']['page'] = placeholder.page.natural_key()
|
||||
data += [serialized_placeholder] + self.serialize_plugins(placeholder.cmsplugin_set.all())
|
||||
return data
|
||||
|
||||
def serialize_plugins(self, plugins):
|
||||
"""
|
||||
serialize plugins and sub plugins
|
||||
"""
|
||||
data = self._serialize(plugins)
|
||||
data = []
|
||||
for plugin in plugins:
|
||||
data += self.serialize_plugins(plugin.cmsplugin_set.all())
|
||||
data += self._serialize(plugin) + self.serialize_plugins(plugin.cmsplugin_set.filter(parent__isnull=True))
|
||||
return data
|
||||
|
||||
def handle(self, *args, **options):
|
||||
|
|
Reference in New Issue