gestiojeux/inventory/migrations/0002_duration_range.py
Guillaume Bertholon 1fea637d7a Use min/max/precisions fields for game duration
There is an data migration for Game items but not for Suggestion items.
It assumes that all duration fields are filled with a single integer or
a range separated by '-' or 'à'.
2021-01-29 12:07:46 +01:00

77 lines
2.3 KiB
Python

# Generated by Django 3.1.5 on 2021-01-28 23:15
from django.db import migrations, models
def extract_duration_range(apps, schema_editor):
Game = apps.get_model("inventory", "Game")
for game in Game.objects.all():
sep = None
if game.duration.count("-") == 1:
sep = "-"
elif game.duration.count("à") == 1:
sep = "à"
if sep:
duration_split = game.duration.split(sep)
game.duration_min = int(duration_split[0])
game.duration_max = int(duration_split[1])
else:
single_duration = int(game.duration)
game.duration_min = single_duration
game.duration_max = single_duration
game.duration = ""
game.save()
class Migration(migrations.Migration):
dependencies = [
("inventory", "0001_initial"),
]
operations = [
migrations.AddField(
model_name="game",
name="duration_max",
field=models.PositiveSmallIntegerField(
null=True,
),
),
migrations.AddField(
model_name="game",
name="duration_min",
field=models.PositiveSmallIntegerField(
null=True,
),
),
migrations.AlterField(
model_name="game",
name="duration",
field=models.CharField(
blank=True,
help_text="Affichage personnalisé pour la durée de la partie",
max_length=256,
verbose_name="durée de partie",
),
),
migrations.RunPython(extract_duration_range),
migrations.AlterField(
model_name="game",
name="duration_max",
field=models.PositiveSmallIntegerField(
blank=True,
help_text="En minutes, telle qu'indiquée par l'éditeur, identique à la durée minimale si laissée vide",
verbose_name="durée de partie maximale",
),
),
migrations.AlterField(
model_name="game",
name="duration_min",
field=models.PositiveSmallIntegerField(
help_text="En minutes, telle qu'indiquée par l'éditeur",
verbose_name="durée de partie minimale",
),
),
]