forked from ungleich-public/dynamicweb
55 lines
2 KiB
Python
55 lines
2 KiB
Python
# Generated by Django 1.11 on 2018-08-24 08:22
|
|
|
|
from django.db import migrations
|
|
|
|
|
|
def forwards(apps, schema_editor):
|
|
db_alias = schema_editor.connection.alias
|
|
ContentType = apps.get_model('contenttypes', 'ContentType')
|
|
CMSPlugin = apps.get_model('cms', 'CMSPlugin')
|
|
Placeholder = apps.get_model('cms', 'Placeholder')
|
|
|
|
for app in apps.get_app_configs():
|
|
for model_class in app.get_models():
|
|
if issubclass(model_class, (CMSPlugin, Placeholder)):
|
|
# We ignore all models inherited from CMSPlugin or Placeholder.
|
|
continue
|
|
|
|
# Get all fields which has a relationship to Placeholder.
|
|
pl_related_fields = [
|
|
f for f in model_class._meta.get_fields()
|
|
if f.related_model == Placeholder and not f.auto_created
|
|
]
|
|
|
|
if not pl_related_fields:
|
|
# Model has no related fields with Placeholder.
|
|
continue
|
|
|
|
# Model has related field/s with Placeholder.
|
|
# Now get all the objects for the model and populate source field.
|
|
cur_ct_obj = ContentType.objects.get_for_model(model_class)
|
|
|
|
for obj in model_class.objects.using(db_alias):
|
|
for pl_field in pl_related_fields:
|
|
obj_placeholder_field = getattr(obj, pl_field.name)
|
|
|
|
if pl_field.many_to_many:
|
|
obj_placeholder_field.update(
|
|
content_type_id=cur_ct_obj.pk,
|
|
object_id=obj.pk,
|
|
)
|
|
elif obj_placeholder_field: # Only update if foreign key was set
|
|
obj_placeholder_field.content_type_id = cur_ct_obj.pk
|
|
obj_placeholder_field.object_id = obj.pk
|
|
obj_placeholder_field.save()
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
dependencies = [
|
|
('cms', '0032_remove_title_to_pagecontent'),
|
|
]
|
|
|
|
operations = [
|
|
migrations.RunPython(forwards),
|
|
]
|