PonyConf/proposals/migrations/0010_auto_20160822_1010.py

88 lines
3.0 KiB
Python

# -*- coding: utf-8 -*-
# Generated by Django 1.10 on 2016-08-22 10:10
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
def migrate_event(apps, schema_editor):
db_alias = schema_editor.connection.alias
# Create default Event instance, as Site post_save is not triggered
Event = apps.get_model('proposals', 'Event')
Site = apps.get_model('sites', 'Site')
for site in Site.objects.using(db_alias).all():
Event.objects.using(db_alias).bulk_create([
Event(site=site, name='conference (short)'),
Event(site=site, name='conference (long)'),
Event(site=site, name='workshop'),
Event(site=site, name='stand'),
Event(site=site, name='other'),
])
# Migrate event_old field to event field
Talk = apps.get_model('proposals', 'Talk')
mapping = {
1: 'conference (short)',
2: 'conference (long)',
3: 'workshop',
4: 'stand',
5: 'other',
}
for talk in Talk.objects.using(db_alias).all():
talk.event = Event.objects.using(db_alias).get(site=talk.site, name=mapping[talk.event_old])
talk.save()
class Migration(migrations.Migration):
dependencies = [
('sites', '0002_alter_domain_unique'),
('proposals', '0009_auto_20160822_0921'),
]
operations = [
# Creation Event model
migrations.CreateModel(
name='Event',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=64)),
('site', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sites.Site')),
],
),
migrations.AlterUniqueTogether(
name='event',
unique_together=set([('site', 'name')]),
),
# Move field event to event_old
migrations.RenameField(
model_name='talk',
old_name='event',
new_name='event_old',
),
# Add field event as ForeignKey to Event model (with NULL allowed for now)
migrations.AddField(
model_name='talk',
name='event',
field=models.ForeignKey(to='proposals.Event', null=True),
),
# We slightly need to modify the ordering to work with the M2M
migrations.AlterModelOptions(
name='talk',
options={'ordering': ('event__id',)},
),
# Migrate the data from event_old field to event field
migrations.RunPython(migrate_event),
# Remove the event_old field as data have been migrated
migrations.RemoveField(
model_name='talk',
name='event_old',
),
# As data are now migrated, switch to null=False for event field
migrations.AlterField(
model_name='talk',
name='event',
field=models.ForeignKey(to='proposals.Event')
),
]