from django.db import migrations, models
import django.db.models.deletion


def forwards_func(apps, schema_editor):
    Pincode = apps.get_model('geo', 'Pincode')
    City = apps.get_model('geo', 'City')
    District = apps.get_model('geo', 'District')
    for pincode in Pincode.objects.all():
        if pincode.city_id:
            try:
                city = City.objects.get(id=pincode.city_id)
                pincode.district_id = city.district_id
                pincode.save(update_fields=['district'])
            except City.DoesNotExist:
                pass

def backwards_func(apps, schema_editor):
    # No-op: can't restore city from district
    pass

class Migration(migrations.Migration):

    dependencies = [
        ('geo', '0001_initial'),
    ]

    operations = [
        migrations.SeparateDatabaseAndState(
            database_operations=[
                migrations.AddField(
                    model_name='pincode',
                    name='district',
                    field=models.ForeignKey(null=True, blank=True, to='geo.District', on_delete=django.db.models.deletion.CASCADE, related_name='pincodes', db_index=True),
                ),
            ],
            state_operations=[
                migrations.AddField(
                    model_name='pincode',
                    name='district',
                    field=models.ForeignKey(null=True, blank=True, to='geo.District', on_delete=django.db.models.deletion.CASCADE, related_name='pincodes', db_index=True),
                ),
            ],
        ),
        migrations.RunPython(forwards_func, backwards_func),
        migrations.AlterField(
            model_name='pincode',
            name='district',
            field=models.ForeignKey(to='geo.District', on_delete=django.db.models.deletion.CASCADE, related_name='pincodes', db_index=True),
        ),
    ]
