forked from ungleich-public/dynamicweb
66 lines
1.8 KiB
Python
66 lines
1.8 KiB
Python
# Generated by Django 1.11.12 on 2018-05-29 14:38
|
|
|
|
from django.db import migrations
|
|
|
|
|
|
def get_descendant_ids(model_class, root_id):
|
|
"""
|
|
Returns the a generator of primary keys which represent
|
|
descendants of the given plugin ID (root_id)
|
|
"""
|
|
ids = (
|
|
model_class
|
|
.objects
|
|
.filter(parent=root_id)
|
|
.order_by('position')
|
|
.values_list('pk', flat=True)
|
|
)
|
|
|
|
for child_id in ids:
|
|
yield child_id
|
|
|
|
for child_id in get_descendant_ids(model_class, child_id):
|
|
yield child_id
|
|
|
|
|
|
def set_plugin_absolute_position(apps, schema_editor):
|
|
db_alias = schema_editor.connection.alias
|
|
CMSPlugin = apps.get_model('cms', 'CMSPlugin')
|
|
Placeholder = apps.get_model('cms', 'Placeholder')
|
|
placeholders = Placeholder.objects.using(db_alias).all()
|
|
all_languages = (
|
|
CMSPlugin
|
|
.objects
|
|
.using(db_alias)
|
|
.values_list('language', flat=True)
|
|
.distinct()
|
|
)
|
|
|
|
for placeholder in placeholders:
|
|
for language in all_languages:
|
|
position = 1
|
|
plugins = placeholder.cmsplugin_set.filter(language=language)
|
|
root_plugin_ids = (
|
|
plugins
|
|
.filter(parent__isnull=True)
|
|
.order_by('position')
|
|
.values_list('pk', flat=True)
|
|
)
|
|
for root_id in root_plugin_ids:
|
|
plugins.filter(pk=root_id).update(position=position)
|
|
position +=1
|
|
|
|
for desc_id in get_descendant_ids(CMSPlugin, root_id=root_id):
|
|
plugins.filter(pk=desc_id).update(position=position)
|
|
position += 1
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
dependencies = [
|
|
('cms', '0023_placeholder_source_field'),
|
|
]
|
|
|
|
operations = [
|
|
migrations.RunPython(set_plugin_absolute_position),
|
|
]
|