add product review loader
This commit is contained in:
parent
2367fec098
commit
6b83003eac
|
|
@ -2,6 +2,7 @@ from pprint import pprint
|
|||
|
||||
from django.db.models import Q
|
||||
|
||||
from product.models import Product
|
||||
from account.models import User
|
||||
from account.transfer_data import STOP_LIST
|
||||
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.inquiries import InquiriesSerializer
|
||||
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():
|
||||
|
|
@ -103,6 +107,26 @@ def transfer_inquiry_photos():
|
|||
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 = {
|
||||
"overlook": [
|
||||
# transfer_languages,
|
||||
|
|
@ -113,5 +137,8 @@ data_types = {
|
|||
transfer_inquiries,
|
||||
transfer_grid,
|
||||
transfer_inquiry_photos,
|
||||
],
|
||||
"product_review": [
|
||||
transfer_product_reviews,
|
||||
]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,11 +36,13 @@ class Command(BaseCommand):
|
|||
'souvenir',
|
||||
'establishment_note',
|
||||
'assemblage',
|
||||
'rating_count'
|
||||
'rating_count',
|
||||
'product_review',
|
||||
]
|
||||
|
||||
def handle(self, *args, **options):
|
||||
"""Находим включённую опцию путём пересечения множества типов данных и множества включённых опций"""
|
||||
"""
|
||||
Находим включённую опцию путём пересечения множества типов данных и множества включённых опций"""
|
||||
data_type = list(set(option for option in options.keys() if options[option]) & set(self.LONG_DATA_TYPES))
|
||||
if len(data_type) != 1:
|
||||
data_type = list(set(option for option in options.keys() if options[option]) & set(self.SHORT_DATA_TYPES))
|
||||
|
|
|
|||
|
|
@ -711,7 +711,7 @@ class Reviews(MigrateMixin):
|
|||
reviewer = models.ForeignKey(Accounts, models.DO_NOTHING, blank=True, null=True)
|
||||
priority = models.IntegerField(blank=True, null=True)
|
||||
# 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)
|
||||
reviewer_name = models.CharField(max_length=255, blank=True, null=True)
|
||||
type = models.CharField(max_length=255, blank=True, null=True)
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ from review.models import Review
|
|||
from account.models import User
|
||||
from translation.models import Language
|
||||
from establishment.models import Establishment
|
||||
from product.models import Product
|
||||
|
||||
|
||||
class ReviewSerializer(serializers.Serializer):
|
||||
|
|
@ -49,6 +50,50 @@ class ReviewSerializer(serializers.Serializer):
|
|||
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):
|
||||
review_id = serializers.IntegerField()
|
||||
locale = serializers.CharField(allow_null=True)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user