88 lines
3.0 KiB
Python
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')
|
|
),
|
|
]
|