diff --git a/bookwyrm/migrations/0046_reviewrating.py b/bookwyrm/migrations/0046_reviewrating.py index b29cdbd2..e410ba91 100644 --- a/bookwyrm/migrations/0046_reviewrating.py +++ b/bookwyrm/migrations/0046_reviewrating.py @@ -4,9 +4,10 @@ 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 conver them to ReviewRatings ''' + ''' take rating type Reviews and convert them to ReviewRatings ''' db_alias = schema_editor.connection.alias reviews = app_registry.get_model( @@ -16,27 +17,16 @@ def convert_review_rating(app_registry, schema_editor): ) with connection.cursor() as cursor: - for review in reviews: - cursor.execute(''' + values = [(r.id,) for r in reviews] + execute_values(cursor, ''' INSERT INTO bookwyrm_reviewrating(review_ptr_id) -SELECT status_ptr_id FROM bookwyrm_review -WHERE status_ptr_id={:d}'''.format(review.id)) +VALUES %s''', values) def unconvert_review_rating(app_registry, schema_editor): ''' undo the conversion from ratings back to reviews''' - # TODO: this does not work - db_alias = schema_editor.connection.alias - - ratings = app_registry.get_model( - 'bookwyrm', 'ReviewRating' - ).objects.using(db_alias).all() - - with connection.cursor() as cursor: - for rating in ratings: - cursor.execute(''' -INSERT INTO bookwyrm_review(status_ptr_id) -SELECT review_ptr_id FROM bookwyrm_reviewrating -WHERE review_ptr_id={:d}'''.format(rating.id)) + # 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):