From cc2c475b4e39c109d5d55d06dd3277f401870022 Mon Sep 17 00:00:00 2001 From: alex Date: Sat, 2 Nov 2019 22:45:57 +0300 Subject: [PATCH] add_establishment_description with elastic error --- .../commands/add_establishment_description.py | 55 +++++++++++++++---- apps/transfer/serializers/establishment.py | 1 - 2 files changed, 45 insertions(+), 11 deletions(-) diff --git a/apps/establishment/management/commands/add_establishment_description.py b/apps/establishment/management/commands/add_establishment_description.py index 00c300f8..ec229e8f 100644 --- a/apps/establishment/management/commands/add_establishment_description.py +++ b/apps/establishment/management/commands/add_establishment_description.py @@ -1,30 +1,65 @@ from django.core.management.base import BaseCommand from establishment.models import Establishment -from transfer.models import Descriptions +from transfer.models import Reviews, ReviewTexts class Command(BaseCommand): - help = 'Add description values from old db to new db' + help = 'Add description values from old db reviews to new db' def handle(self, *args, **kwargs): count = 0 + update_locale = 0 + valid_reviews = {} - queryset = Descriptions.objects.all() - for obj in queryset: + queryset = Reviews.objects.exclude( + establishment_id__isnull=True + ).filter( + aasm_state='published' + ).values_list( + 'id', + 'establishment_id', + 'updated_at', + ) + + for r_id, establishment_id, new_date in queryset: try: - establishment = Establishment.objects.get(old_id=obj.establishment.id) - except Establishment.DoesNotExist: - continue - except Establishment.MultipleObjectsReturned: - establishment = Establishment.objects.filter(old_id=obj.establishment.id).first() + es_id, date = valid_reviews[r_id] + except KeyError: + valid_reviews[r_id] = (establishment_id, new_date) else: + if new_date > date: + valid_reviews[r_id] = (establishment_id, new_date) + + text_qs = ReviewTexts.objects.filter( + review_id__in=(r_id for r_id in valid_reviews.keys()) + ).values_list( + 'review__establishment_id', + 'locale', + 'text', + ) + + for es_id, locale, text in text_qs: + establishment = Establishment.objects.filter(old_id=es_id).first() + if establishment: description = establishment.description description.update({ - obj.locale: obj.text + locale: text }) establishment.description = description establishment.save() count += 1 + # Если нет en-GB в поле + for establishment in Establishment.objects.filter(old_id__isnull=False): + description = establishment.description + if len(description) and 'en-GB' not in description: + description.update({ + 'en-GB': next(iter(description.values())) + }) + establishment.description = description + establishment.save() + update_locale += 1 + self.stdout.write(self.style.WARNING(f'Updated {count} objects.')) + self.stdout.write(self.style.WARNING(f'Updated en-GB locale - {count}')) diff --git a/apps/transfer/serializers/establishment.py b/apps/transfer/serializers/establishment.py index 6a2fcde5..78db0995 100644 --- a/apps/transfer/serializers/establishment.py +++ b/apps/transfer/serializers/establishment.py @@ -95,7 +95,6 @@ class EstablishmentSerializer(serializers.ModelSerializer): if address: return address.id return None - # return None @staticmethod def get_type(data):