# -*- coding: utf-8 -*- from django.core.management.base import NoArgsCommand from conference.models import Conference from exposition.models import Exposition from functions.form_check import translit_with_separator class Command(NoArgsCommand): objects_per_cycle = 1000 def handle_noargs(self, **options): for model in [Conference, Exposition]: print('checking {name}'.format(name=model.__name__)) self.run_objects(model) print('Done.') def run_objects(self, model): object_ids = [] qs = model.objects.language('ru').all().order_by('created') objects_max = qs.count() print('Total objects {total}'.format(total=objects_max)) slice_offset = 0 while slice_offset <= objects_max: print('runnig for {start}:{end}'.format(start=slice_offset, end=slice_offset + self.objects_per_cycle)) for event in qs[slice_offset:slice_offset + self.objects_per_cycle]: name = event.name.strip().lower() if (name and event.url != translit_with_separator(name)) or not name: object_ids.append(event.pk) elif name and event.bad_url: event.bad_url = False event.save() slice_offset = slice_offset + self.objects_per_cycle print('objects found {count}'.format(count=len(object_ids))) if object_ids: model.objects.filter(pk__in=object_ids).update(bad_url=True)