You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.8 KiB
79 lines
2.8 KiB
# Generated by Django 4.2.30 on 2026-10-19 06:30
|
|
|
|
import json
|
|
from django.db import migrations, models
|
|
import django.db.models.deletion
|
|
|
|
|
|
def migrate_existing_opinions_forward(apps, schema_editor):
|
|
ScholarlyOpinion = apps.get_model("hadis", "ScholarlyOpinion")
|
|
TransmitterOpinion = apps.get_model("hadis", "TransmitterOpinion")
|
|
|
|
cache = {}
|
|
for to in TransmitterOpinion.objects.all().order_by("id"):
|
|
if to.opinion_id:
|
|
continue
|
|
raw_text = to.opinion_text if isinstance(to.opinion_text, list) else []
|
|
try:
|
|
key = (to.status_id, json.dumps(raw_text, sort_keys=True, ensure_ascii=False))
|
|
except Exception:
|
|
key = (to.status_id, str(raw_text))
|
|
|
|
scholarly_op = cache.get(key)
|
|
if scholarly_op is None:
|
|
scholarly_op = ScholarlyOpinion.objects.create(
|
|
opinion_text=raw_text,
|
|
status_id=to.status_id,
|
|
)
|
|
cache[key] = scholarly_op
|
|
|
|
to.opinion_id = scholarly_op.id
|
|
to.save(update_fields=["opinion"])
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
dependencies = [
|
|
("hadis", "0052_transmitters_gender"),
|
|
]
|
|
|
|
operations = [
|
|
migrations.CreateModel(
|
|
name="ScholarlyOpinion",
|
|
fields=[
|
|
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
|
|
("opinion_text", models.JSONField(default=list, verbose_name="Opinion Text")),
|
|
("created_at", models.DateTimeField(auto_now_add=True, verbose_name="created at")),
|
|
("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
|
|
(
|
|
"status",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
related_name="scholarly_opinions",
|
|
to="hadis.opinionstatus",
|
|
verbose_name="opinion status",
|
|
),
|
|
),
|
|
],
|
|
options={
|
|
"verbose_name": "Scholarly Opinion",
|
|
"verbose_name_plural": "Scholarly Opinions",
|
|
"ordering": ("-id",),
|
|
},
|
|
),
|
|
migrations.AddField(
|
|
model_name="transmitteropinion",
|
|
name="opinion",
|
|
field=models.ForeignKey(
|
|
blank=True,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
related_name="transmitter_opinions",
|
|
to="hadis.scholarlyopinion",
|
|
verbose_name="Scholarly Opinion",
|
|
),
|
|
),
|
|
migrations.RunPython(migrate_existing_opinions_forward, migrations.RunPython.noop),
|
|
]
|