Skip to content

Instantly share code, notes, and snippets.

@matthiask
Created January 23, 2017 14:28
Show Gist options
  • Save matthiask/5baf1934abedfd5e18fba1fb5c3c4bbe to your computer and use it in GitHub Desktop.
Save matthiask/5baf1934abedfd5e18fba1fb5c3c4bbe to your computer and use it in GitHub Desktop.
from django.core.management.base import BaseCommand
from feincms.module.page.models import Page
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument('from_pk', type=int)
parser.add_argument('to_language', type=str)
def handle(self, **options):
root = Page.objects.get(
parent=None,
pk=options['from_pk'],
)
pk_map = {}
parent_map = {}
for page in list(root.get_descendants(include_self=True)):
self.stdout.write(
u'Procesing %s, %s, %s\n' % (page, page.pk, page._cached_url))
previous_pk = page.pk
page.translation_of_id = page.pk
page.pk = None
page.language = options['to_language']
if page.parent is None:
page.override_url = '/%s/' % options['to_language']
else:
page.parent_id = pk_map[page.parent_id]
page.parent = parent_map[page.parent_id]
page.tree_id = page.lft = page.rght = page.level = None
page.save(force_insert=True)
pk_map[previous_pk] = page.pk
parent_map[page.pk] = page
for ct in page._feincms_content_types:
for block in ct.objects.filter(parent=previous_pk):
block.pk = None
block.parent = page
block.save(force_insert=True)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment