From 45d28617dbd98276bb512d6af0b80ea565fd3e33 Mon Sep 17 00:00:00 2001 From: Serghei MIHAI Date: Fri, 4 Apr 2014 16:38:19 +0200 Subject: [PATCH] link page -> placeholders refactored --- .../management/commands/exportpage.py | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/portail_citoyen/management/commands/exportpage.py b/portail_citoyen/management/commands/exportpage.py index 398147e..3bf8888 100644 --- a/portail_citoyen/management/commands/exportpage.py +++ b/portail_citoyen/management/commands/exportpage.py @@ -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):