forked from mirrors/bookwyrm
54 lines
1.4 KiB
Python
54 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),
|
||
|
]
|