diff --git a/.gitignore b/.gitignore index 90e4f23f..26d44a44 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,4 @@ celerybeat.pid /gm_viktor.dump /docker-compose.dump.yml /gm_production_20191029.sql +/apps/transfer/log diff --git a/apps/review/transfer_data.py b/apps/review/transfer_data.py index ac3749f6..c32e1764 100644 --- a/apps/review/transfer_data.py +++ b/apps/review/transfer_data.py @@ -55,13 +55,15 @@ def transfer_text_review(): text__isnull=True ).exclude( text__iexact='' - ).values('review_id', 'locale', 'text') + ).values('review_id', 'locale', 'text', 'updated_by', 'created_at', 'updated_at') - serialized_data = ReviewTextSerializer(data=list(queryset), many=True) - if serialized_data.is_valid(): - serialized_data.save() - else: - pprint(f"ReviewTextSerializer serializer errors: {serialized_data.errors}") + print(queryset.count()) + + # serialized_data = ReviewTextSerializer(data=list(queryset), many=True) + # if serialized_data.is_valid(): + # serialized_data.save() + # else: + # pprint(f"ReviewTextSerializer serializer errors: {serialized_data.errors}") def make_en_text_review(): @@ -142,5 +144,8 @@ data_types = { ], "product_review": [ transfer_product_reviews, + ], + "transfer_text_review": [ + transfer_text_review, ] } diff --git a/apps/transfer/management/commands/transfer.py b/apps/transfer/management/commands/transfer.py index 802f0989..7dc76d45 100644 --- a/apps/transfer/management/commands/transfer.py +++ b/apps/transfer/management/commands/transfer.py @@ -58,7 +58,8 @@ class Command(BaseCommand): 'setup_clean_db', 'languages', # №4 - перенос языков 'set_unused_regions', - 'update_fake_country_flag' + 'update_fake_country_flag', + 'transfer_text_review', # переводы для review с их авторами - запускать после overlook и product_review ] def handle(self, *args, **options): @@ -68,7 +69,8 @@ class Command(BaseCommand): if len(data_type) != 1: data_type = list(set(option for option in options.keys() if options[option]) & set(self.SHORT_DATA_TYPES)) if len(data_type) != 1: - print("You must set correct option!\r\nYou can get options list with \r\n\r\n\tmanage.py help transfer\r\n") + print( + "You must set correct option!\r\nYou can get options list with \r\n\r\n\tmanage.py help transfer\r\n") exit(1) else: data_type = data_type[0] diff --git a/apps/transfer/serializers/reviews.py b/apps/transfer/serializers/reviews.py index 6d3f50b4..7085ae6d 100644 --- a/apps/transfer/serializers/reviews.py +++ b/apps/transfer/serializers/reviews.py @@ -1,5 +1,5 @@ from rest_framework import serializers -from review.models import Review +from review.models import Review, ReviewTextAuthor from account.models import User from translation.models import Language from establishment.models import Establishment @@ -97,24 +97,41 @@ class ReviewTextSerializer(serializers.Serializer): review_id = serializers.IntegerField() locale = serializers.CharField(allow_null=True) text = serializers.CharField() + updated_by = serializers.IntegerField(allow_null=True) + created_at = serializers.DateTimeField(format='%m-%d-%Y %H:%M:%S') + updated_at = serializers.DateTimeField(format='%m-%d-%Y %H:%M:%S') def validate(self, data): data.update({ 'new_text': self.get_text(data), 'review': self.get_review(data), + 'author': self.get_author(data), }) data.pop('review_id') - data.pop('locale') data.pop('text') return data def create(self, validated_data): review = validated_data['review'] + author_payload = { + 'review': review, + 'author': validated_data['author'], + 'locale': validated_data['locale'] or 'en-GB', + 'created': validated_data['created_at'], + } if review.text: review.text.update(validated_data['new_text']) else: review.text = validated_data['new_text'] review.save() + + if validated_data['author'] and validated_data['locale']: + review_author, _ = ReviewTextAuthor.objects.update_or_create( + review=review, + locale=author_payload['locale'], + defaults=author_payload, + ) + return review @staticmethod @@ -130,6 +147,12 @@ class ReviewTextSerializer(serializers.Serializer): raise ValueError(f"Review not found with old_id {data['review_id']}: ") return review + @staticmethod + def get_author(data): + user = User.objects.filter(old_id=data['updated_by']).first() + if user: + return user + class LanguageSerializer(serializers.ModelSerializer): LANGUAGES = {