Skip to content

Instantly share code, notes, and snippets.

@Znack
Created December 9, 2015 16:27
Show Gist options
  • Save Znack/7e18a330907dd7bee08a to your computer and use it in GitHub Desktop.
Save Znack/7e18a330907dd7bee08a to your computer and use it in GitHub Desktop.
Custom operations in migrations
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
def make_balance_nullable_forwards(apps, schema_editor):
Carrier = apps.get_model("carriers", "Carrier")
default_balance_carriers = Carrier.objects.filter(balance=0)
default_deposit_carriers = Carrier.objects.filter(deposit=0)
for carrier in default_balance_carriers:
carrier.balance = None
carrier.save()
for carrier in default_deposit_carriers:
carrier.deposit = None
carrier.save()
def make_balance_nullable_reverse(apps, schema_editor):
Carrier = apps.get_model("carriers", "Carrier")
null_balance_carriers = Carrier.objects.filter(balance__isnull=True)
null_deposit_carriers = Carrier.objects.filter(deposit__isnull=True)
for carrier in null_balance_carriers:
carrier.balance = 0
carrier.save()
for carrier in null_deposit_carriers:
carrier.deposit = 0
carrier.save()
class Migration(migrations.Migration):
dependencies = [
('carriers', '0004_auto_20151008_0641'),
]
operations = [
migrations.AddField(
model_name='carrier',
name='currency',
field=models.CharField(default=b'DOL', max_length=3, choices=[(b'DOL', b'Dollar'), (b'EUR', b'Euro'), (b'POU', b'Pounds')]),
preserve_default=True,
),
migrations.AddField(
model_name='carrier',
name='notes',
field=models.TextField(null=True, blank=True),
preserve_default=True,
),
migrations.AddField(
model_name='carrier',
name='short_name',
field=models.CharField(max_length=8, unique=True, null=True, blank=True),
preserve_default=True,
),
migrations.AlterField(
model_name='carrier',
name='balance',
field=models.IntegerField(null=True, blank=True),
),
migrations.AlterField(
model_name='carrier',
name='deposit',
field=models.PositiveIntegerField(null=True, blank=True),
),
migrations.RunPython(make_balance_nullable_forwards, make_balance_nullable_reverse),
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment