add product review loader

This commit is contained in:
Dmitriy Kuzmenko 2019-11-15 02:44:09 +03:00
parent 2367fec098
commit 6b83003eac
4 changed files with 78 additions and 4 deletions

View File

@ -2,6 +2,7 @@ from pprint import pprint
from django.db.models import Q from django.db.models import Q
from product.models import Product
from account.models import User from account.models import User
from account.transfer_data import STOP_LIST from account.transfer_data import STOP_LIST
from establishment.models import Establishment from establishment.models import Establishment
@ -10,7 +11,10 @@ from transfer.models import Reviews, ReviewTexts, Inquiries, GridItems, InquiryP
from transfer.serializers.grid import GridItemsSerializer from transfer.serializers.grid import GridItemsSerializer
from transfer.serializers.inquiries import InquiriesSerializer from transfer.serializers.inquiries import InquiriesSerializer
from transfer.serializers.inquiry_gallery import InquiryGallerySerializer from transfer.serializers.inquiry_gallery import InquiryGallerySerializer
from transfer.serializers.reviews import LanguageSerializer, ReviewSerializer, ReviewTextSerializer from transfer.serializers.reviews import (
LanguageSerializer, ReviewSerializer, ReviewTextSerializer, ProductReviewSerializer
)
def transfer_languages(): def transfer_languages():
@ -103,6 +107,26 @@ def transfer_inquiry_photos():
pprint(f"InquiryGallery serializer errors: {serialized_data.errors}") pprint(f"InquiryGallery serializer errors: {serialized_data.errors}")
def transfer_product_reviews():
products = Product.objects.filter(
old_id__isnull=False).values_list('old_id', flat=True)
users = User.objects.filter(
old_id__isnull=False).values_list('old_id', flat=True)
queryset = Reviews.objects.filter(
product_id__in=list(products),
reviewer_id__in=list(users),
).values('id', 'reviewer_id', 'aasm_state', 'created_at', 'product_id', 'mark', 'vintage')
serialized_data = ProductReviewSerializer(data=list(queryset.values()), many=True)
if serialized_data.is_valid():
serialized_data.save()
else:
pprint(f"ProductReviewSerializer serializer errors: {serialized_data.errors}")
data_types = { data_types = {
"overlook": [ "overlook": [
# transfer_languages, # transfer_languages,
@ -113,5 +137,8 @@ data_types = {
transfer_inquiries, transfer_inquiries,
transfer_grid, transfer_grid,
transfer_inquiry_photos, transfer_inquiry_photos,
],
"product_review": [
transfer_product_reviews,
] ]
} }

View File

@ -36,11 +36,13 @@ class Command(BaseCommand):
'souvenir', 'souvenir',
'establishment_note', 'establishment_note',
'assemblage', 'assemblage',
'rating_count' 'rating_count',
'product_review',
] ]
def handle(self, *args, **options): def handle(self, *args, **options):
"""Находим включённую опцию путём пересечения множества типов данных и множества включённых опций""" """
Находим включённую опцию путём пересечения множества типов данных и множества включённых опций"""
data_type = list(set(option for option in options.keys() if options[option]) & set(self.LONG_DATA_TYPES)) data_type = list(set(option for option in options.keys() if options[option]) & set(self.LONG_DATA_TYPES))
if len(data_type) != 1: if len(data_type) != 1:
data_type = list(set(option for option in options.keys() if options[option]) & set(self.SHORT_DATA_TYPES)) data_type = list(set(option for option in options.keys() if options[option]) & set(self.SHORT_DATA_TYPES))

View File

@ -711,7 +711,7 @@ class Reviews(MigrateMixin):
reviewer = models.ForeignKey(Accounts, models.DO_NOTHING, blank=True, null=True) reviewer = models.ForeignKey(Accounts, models.DO_NOTHING, blank=True, null=True)
priority = models.IntegerField(blank=True, null=True) priority = models.IntegerField(blank=True, null=True)
# TODO: модель Products в postgres закомментирована # TODO: модель Products в postgres закомментирована
# product = models.ForeignKey("Products", models.DO_NOTHING, blank=True, null=True) product = models.ForeignKey("Products", models.DO_NOTHING, blank=True, null=True)
received_at = models.DateTimeField(blank=True, null=True) received_at = models.DateTimeField(blank=True, null=True)
reviewer_name = models.CharField(max_length=255, blank=True, null=True) reviewer_name = models.CharField(max_length=255, blank=True, null=True)
type = models.CharField(max_length=255, blank=True, null=True) type = models.CharField(max_length=255, blank=True, null=True)

View File

@ -3,6 +3,7 @@ from review.models import Review
from account.models import User from account.models import User
from translation.models import Language from translation.models import Language
from establishment.models import Establishment from establishment.models import Establishment
from product.models import Product
class ReviewSerializer(serializers.Serializer): class ReviewSerializer(serializers.Serializer):
@ -49,6 +50,50 @@ class ReviewSerializer(serializers.Serializer):
return establishment return establishment
class ProductReviewSerializer(ReviewSerializer):
vintage = serializers.IntegerField()
mark = serializers.FloatField(allow_null=True)
product_id = serializers.IntegerField()
created_at = serializers.DateTimeField(format='%m-%d-%Y %H:%M:%S')
aasm_state = serializers.CharField(allow_null=True)
reviewer_id = serializers.IntegerField()
id = serializers.IntegerField()
def validate(self, data):
data.update({
'reviewer': self.get_reviewer(data),
'status': Review.READY if data['aasm_state'] == 'published' else Review.TO_INVESTIGATE,
'published_at': data.pop('created_at'),
'old_id': data.pop('id'),
'content_object': self.get_product(data),
})
data.pop('reviewer_id')
data.pop('product_id')
data.pop('aasm_state')
return data
def create(self, validated_data):
obj, _ = Review.objects.update_or_create(
old_id=validated_data['old_id'],
defaults=validated_data,
)
return obj
@staticmethod
def get_reviewer(data):
user = User.objects.filter(old_id=data['reviewer_id']).first()
if not user:
raise ValueError(f"User account not found with old_id {data['reviewer_id']}")
return user
@staticmethod
def get_product(data):
establishment = Product.objects.filter(old_id=data['product_id']).first()
if not establishment:
raise ValueError(f"Product not found with old_id {data['product_id']}: ")
return establishment
class ReviewTextSerializer(serializers.Serializer): class ReviewTextSerializer(serializers.Serializer):
review_id = serializers.IntegerField() review_id = serializers.IntegerField()
locale = serializers.CharField(allow_null=True) locale = serializers.CharField(allow_null=True)