Commit e7fcc743 by Ned Batchelder

More-correct data migrations

We need to be sure the migrations will work even in the presence of data
from the future.  get_or_create is a problem, because if the data
already exists, there could be more than one record, even if this
migration only creates one.
parent d8403c1d
...@@ -11,11 +11,12 @@ def create_dark_lang_config(apps, schema_editor): ...@@ -11,11 +11,12 @@ def create_dark_lang_config(apps, schema_editor):
Enable DarkLang by default when it is installed, to prevent accidental Enable DarkLang by default when it is installed, to prevent accidental
release of testing languages. release of testing languages.
""" """
dark_lang_model = apps.get_model("dark_lang", "DarkLangConfig") DarkLangConfig = apps.get_model("dark_lang", "DarkLangConfig")
db_alias = schema_editor.connection.alias db_alias = schema_editor.connection.alias
if not dark_lang_model.objects.using(db_alias).exists(): objects = DarkLangConfig.objects.using(db_alias)
dark_lang_model.objects.using(db_alias).create(enabled=True) if not objects.exists():
objects.create(enabled=True)
def remove_dark_lang_config(apps, schema_editor): def remove_dark_lang_config(apps, schema_editor):
"""Write your backwards methods here.""" """Write your backwards methods here."""
......
...@@ -8,9 +8,12 @@ from django.db import migrations, models ...@@ -8,9 +8,12 @@ from django.db import migrations, models
def forwards(apps, schema_editor): def forwards(apps, schema_editor):
"""Ensure that rate limiting is enabled by default. """ """Ensure that rate limiting is enabled by default. """
rate_limit_configuration_model = apps.get_model("util", "RateLimitConfiguration") RateLimitConfiguration = apps.get_model("util", "RateLimitConfiguration")
db_alias = schema_editor.connection.alias db_alias = schema_editor.connection.alias
rate_limit_configuration_model.objects.using(db_alias).get_or_create(enabled=True) objects = RateLimitConfiguration.objects.using(db_alias)
if not objects.exists():
objects.create(enabled=True)
class Migration(migrations.Migration): class Migration(migrations.Migration):
......
...@@ -9,11 +9,13 @@ from django.core.files import File ...@@ -9,11 +9,13 @@ from django.core.files import File
def forwards(apps, schema_editor): def forwards(apps, schema_editor):
"""Add default modes""" """Add default modes"""
badge_image_configuration_model = apps.get_model("certificates", "BadgeImageConfiguration") BadgeImageConfiguration = apps.get_model("certificates", "BadgeImageConfiguration")
db_alias = schema_editor.connection.alias
for mode in ['honor', 'verified', 'professional']: objects = BadgeImageConfiguration.objects.using(db_alias)
conf, created = badge_image_configuration_model.objects.get_or_create(mode=mode) if not objects.exists():
if created: for mode in ['honor', 'verified', 'professional']:
conf = objects.create(mode=mode)
file_name = '{0}{1}'.format(mode, '.png') file_name = '{0}{1}'.format(mode, '.png')
conf.icon.save( conf.icon.save(
'badges/{}'.format(file_name), 'badges/{}'.format(file_name),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment