gault-millau/apps/establishment/management/commands/add_establishment_description.py
2019-11-03 00:36:19 +03:00

68 lines
2.3 KiB
Python

from django.core.management.base import BaseCommand
from establishment.models import Establishment
from transfer.models import Reviews, ReviewTexts
class Command(BaseCommand):
help = 'Add description values from old db reviews to new db'
def handle(self, *args, **kwargs):
count = 0
update_locale = 0
valid_reviews = {}
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:
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.exclude(
locale__isnull=True
).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, description__isnull=True).first()
if establishment:
description = establishment.description
description.update({
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}'))