forked from mirrors/bookwyrm
53 lines
1.4 KiB
Python
53 lines
1.4 KiB
Python
# Generated by Django 3.2.5 on 2021-10-01 20:12
|
|
|
|
from django.db import migrations, models
|
|
|
|
|
|
def set_thread_id(app_registry, schema_editor):
|
|
"""set thread ids"""
|
|
db_alias = schema_editor.connection.alias
|
|
# set the thread id on parent nodes
|
|
model = app_registry.get_model("bookwyrm", "Status")
|
|
model.objects.using(db_alias).filter(reply_parent__isnull=True).update(
|
|
thread_id=models.F("id")
|
|
)
|
|
|
|
queryset = model.objects.using(db_alias).filter(
|
|
reply_parent__isnull=False,
|
|
reply_parent__thread_id__isnull=False,
|
|
thread_id__isnull=True,
|
|
)
|
|
iters = 0
|
|
while queryset.exists():
|
|
queryset.update(
|
|
thread_id=models.Subquery(
|
|
model.objects.filter(id=models.OuterRef("reply_parent")).values_list(
|
|
"thread_id"
|
|
)[:1]
|
|
)
|
|
)
|
|
print(iters)
|
|
iters += 1
|
|
if iters > 50:
|
|
print("exceeded query depth")
|
|
break
|
|
|
|
|
|
def reverse(*_):
|
|
"""do nothing"""
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
dependencies = [
|
|
("bookwyrm", "0103_remove_connector_local"),
|
|
]
|
|
|
|
operations = [
|
|
migrations.AddField(
|
|
model_name="status",
|
|
name="thread_id",
|
|
field=models.IntegerField(blank=True, null=True),
|
|
),
|
|
migrations.RunPython(set_thread_id, reverse),
|
|
]
|