# Generated by Django 3.0.7 on 2021-02-25 18:36 from django.db import migrations, models from django.db import connection from django.db.models import Q import django.db.models.deletion from psycopg2.extras import execute_values def convert_review_rating(app_registry, schema_editor): """take rating type Reviews and convert them to ReviewRatings""" db_alias = schema_editor.connection.alias reviews = ( app_registry.get_model("bookwyrm", "Review") .objects.using(db_alias) .filter(Q(content__isnull=True) | Q(content="")) ) with connection.cursor() as cursor: values = [(r.id,) for r in reviews] execute_values( cursor, """ INSERT INTO bookwyrm_reviewrating(review_ptr_id) VALUES %s""", values, ) def unconvert_review_rating(app_registry, schema_editor): """undo the conversion from ratings back to reviews""" # All we need to do to revert this is drop the table, which Django will do # on its own, as long as we have a valid reverse function. So, this is a # no-op function so Django will do its thing class Migration(migrations.Migration): dependencies = [ ("bookwyrm", "0045_auto_20210210_2114"), ] operations = [ migrations.CreateModel( name="ReviewRating", fields=[ ( "review_ptr", models.OneToOneField( auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to="bookwyrm.Review", ), ), ], options={ "abstract": False, }, bases=("bookwyrm.review",), ), migrations.RunPython(convert_review_rating, unconvert_review_rating), ]