# Generated by Django 5.2.17 on 2026-08-19 import django.db.models.deletion from django.db import migrations, models def _column_names(connection, table): with connection.cursor() as cursor: if connection.vendor == "sqlite": cursor.execute(f"PRAGMA table_info({table})") return {row[1] for row in cursor.fetchall()} cursor.execute( """ SELECT column_name FROM information_schema.columns WHERE table_name = %s """, [table], ) return {row[0] for row in cursor.fetchall()} def ensure_cycle_kandang_id(apps, schema_editor): connection = schema_editor.connection if "kandang_id" in _column_names(connection, "cycles"): return with connection.cursor() as cursor: cursor.execute( "ALTER TABLE cycles ADD COLUMN kandang_id bigint NULL REFERENCES kandang(id)" ) def backfill_cycle_flocks(apps, schema_editor): Cycle = apps.get_model("farms", "Cycle") Flock = apps.get_model("farms", "Flock") for cycle_id in Cycle.objects.filter(flock_id__isnull=True).values_list("pk", flat=True): flock = Flock.objects.create(flock_name=f"Cycle {cycle_id}") Cycle.objects.filter(pk=cycle_id).update(flock_id=flock.pk) Flock.objects.filter(pk=flock.pk).update(cycle_id=cycle_id) class Migration(migrations.Migration): dependencies = [ ("farms", "0001_initial"), ] operations = [ migrations.RunPython(ensure_cycle_kandang_id, migrations.RunPython.noop), migrations.RunPython(backfill_cycle_flocks, migrations.RunPython.noop), migrations.AlterField( model_name="cycle", name="flock", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="cycles", to="farms.flock", ), ), migrations.AlterField( model_name="cycle", name="status", field=models.CharField( choices=[("active", "Active"), ("closed", "Closed")], db_index=True, default="active", max_length=30, ), ), migrations.AlterField( model_name="flock", name="cycle", field=models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="flock_set", to="farms.cycle", ), ), ]