''' 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()