# 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), ]