""" PROCEED WITH CAUTION: this permanently deletes book data """ from django.core.management.base import BaseCommand from django.db.models import Count, Q from bookwyrm import models def remove_editions(): """ combine duplicate editions and update related models """ # not in use filters = { "%s__isnull" % r.name: True for r in models.Edition._meta.related_objects } # no cover, no identifying fields filters["cover"] = "" null_fields = { "%s__isnull" % f: True for f in ["isbn_10", "isbn_13", "oclc_number"] } editions = ( models.Edition.objects.filter( Q(languages=[]) | Q(languages__contains=["English"]), **filters, **null_fields ) .annotate(Count("parent_work__editions")) .filter( # mustn't be the only edition for the work parent_work__editions__count__gt=1 ) ) print(editions.count()) editions.delete() class Command(BaseCommand): """ dedplucate allllll the book data models """ help = "merges duplicate book data" # pylint: disable=no-self-use,unused-argument def handle(self, *args, **options): """ run deudplications """ remove_editions()