This commit is contained in:
Ross
2025-12-05 10:46:16 +00:00
parent be1fea5fd4
commit bf9e90d754
13 changed files with 401 additions and 27 deletions
@@ -0,0 +1,61 @@
from django.db import migrations, models
def forwards(apps, schema_editor):
Dinosaur = apps.get_model('cards', 'Dinosaur')
# Constants must match those used in models at conversion time
SPEED_MAX_KMH = 60.0
WEIGHT_MAX_KG = 15000.0
HEIGHT_MAX_M = 12.0
for obj in Dinosaur.objects.all():
try:
# previous values were 0-100 percentages
old_speed = getattr(obj, 'speed', None)
old_weight = getattr(obj, 'weight', None)
old_height = getattr(obj, 'height', None)
if old_speed is not None:
new_speed = int(round(float(old_speed) / 100.0 * SPEED_MAX_KMH))
obj.speed = new_speed
if old_weight is not None:
new_weight = int(round(float(old_weight) / 100.0 * WEIGHT_MAX_KG))
obj.weight = new_weight
if old_height is not None:
new_height = round(float(old_height) / 100.0 * HEIGHT_MAX_M, 1)
# assign as string to avoid Decimal conversion issues
obj.height = new_height
obj.save(update_fields=['speed', 'weight', 'height'])
except Exception:
# skip errors during migration for safety; admins can fix manually
continue
def reverse(apps, schema_editor):
# Not reversible automatically
pass
class Migration(migrations.Migration):
dependencies = [
('cards', '0003_dinosaur_facts'),
]
operations = [
migrations.AlterField(
model_name='dinosaur',
name='speed',
field=models.PositiveIntegerField(default=30, help_text='Speed in km/h'),
),
migrations.AlterField(
model_name='dinosaur',
name='weight',
field=models.PositiveIntegerField(default=1000, help_text='Weight in kg'),
),
migrations.AlterField(
model_name='dinosaur',
name='height',
field=models.DecimalField(default=1.5, max_digits=5, decimal_places=1, help_text='Height in metres'),
),
migrations.RunPython(forwards, reverse_code=migrations.RunPython.noop),
]
@@ -0,0 +1,16 @@
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('cards', '0004_convert_stats_to_units'),
]
operations = [
migrations.AddField(
model_name='dinosaur',
name='background',
field=models.ForeignKey(blank=True, help_text='Optional per-card background image', null=True, on_delete=models.SET_NULL, related_name='dinosaurs', to='cards.backgroundimage'),
),
]
@@ -0,0 +1,18 @@
# Generated by Django 6.0 on 2025-12-05 10:23
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('cards', '0004_convert_stats_to_units'),
]
operations = [
migrations.AlterField(
model_name='dinosaur',
name='intelligence',
field=models.PositiveSmallIntegerField(default=50, help_text='Score 0-100'),
),
]
@@ -0,0 +1,14 @@
# Generated by Django 6.0 on 2025-12-05 10:39
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('cards', '0005_add_background_fk'),
('cards', '0005_alter_dinosaur_intelligence'),
]
operations = [
]