# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import migrations, models from django.conf import settings from django.utils import timezone def fill_tirage_fields(apps, schema_editor): """ Create a `Tirage` to fill new field `tirage` of `Participant` and `Spectacle` already existing. """ Participant = apps.get_model("bda", "Participant") Spectacle = apps.get_model("bda", "Spectacle") Tirage = apps.get_model("bda", "Tirage") # These querysets only contains instances not linked to any `Tirage`. participants = Participant.objects.filter(tirage=None) spectacles = Spectacle.objects.filter(tirage=None) if not participants.count() and not spectacles.count(): # No need to create a "trash" tirage. return tirage = Tirage.objects.create( title="Tirage de test (migration)", active=False, ouverture=timezone.now(), fermeture=timezone.now(), ) participants.update(tirage=tirage) spectacles.update(tirage=tirage) class Migration(migrations.Migration): dependencies = [ ('bda', '0001_initial'), ] operations = [ migrations.CreateModel( name='Tirage', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('title', models.CharField(max_length=300, verbose_name=b'Titre')), ('ouverture', models.DateTimeField(verbose_name=b"Date et heure d'ouverture du tirage")), ('fermeture', models.DateTimeField(verbose_name=b'Date et heure de fermerture du tirage')), ('token', models.TextField(verbose_name=b'Graine du tirage', blank=True)), ('active', models.BooleanField(default=True, verbose_name=b'Tirage actif')), ], ), migrations.AlterField( model_name='participant', name='user', field=models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE), ), # Create fields `spectacle` for `Participant` and `Spectacle` models. # These fields are not nullable, but we first create them as nullable # to give a default value for existing instances of these models. migrations.AddField( model_name='participant', name='tirage', field=models.ForeignKey(to='bda.Tirage', null=True, on_delete=models.CASCADE), ), migrations.AddField( model_name='spectacle', name='tirage', field=models.ForeignKey(to='bda.Tirage', null=True, on_delete=models.CASCADE), ), migrations.RunPython(fill_tirage_fields, migrations.RunPython.noop), migrations.AlterField( model_name='participant', name='tirage', field=models.ForeignKey(to='bda.Tirage', on_delete=models.CASCADE), ), migrations.AlterField( model_name='spectacle', name='tirage', field=models.ForeignKey(to='bda.Tirage', on_delete=models.CASCADE), ), ]