82 lines
2.6 KiB
Python
82 lines
2.6 KiB
Python
# 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",
|
|
),
|
|
),
|
|
]
|