migrate inquiries grid

This commit is contained in:
alex 2019-11-11 17:45:34 +03:00
parent 7106249d1e
commit d5799ca768
8 changed files with 102 additions and 24 deletions

View File

@ -0,0 +1,18 @@
# Generated by Django 2.2.4 on 2019-11-11 14:39
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('review', '0010_inquiries_published'),
]
operations = [
migrations.RenameField(
model_name='griditems',
old_name='decs',
new_name='desc',
),
]

View File

@ -0,0 +1,18 @@
# Generated by Django 2.2.4 on 2019-11-11 14:42
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('review', '0011_auto_20191111_1439'),
]
operations = [
migrations.AddField(
model_name='griditems',
name='old_id',
field=models.PositiveIntegerField(blank=True, default=None, null=True, verbose_name='old id'),
),
]

View File

@ -116,11 +116,12 @@ class Inquiries(ProjectBaseMixin):
class GridItems(ProjectBaseMixin): class GridItems(ProjectBaseMixin):
old_id = models.PositiveIntegerField(_('old id'), blank=True, null=True, default=None)
inquiry = models.ForeignKey(Inquiries, verbose_name=_('inquiry'), on_delete=models.CASCADE, related_name='grids') inquiry = models.ForeignKey(Inquiries, verbose_name=_('inquiry'), on_delete=models.CASCADE, related_name='grids')
sub_name = models.CharField(_('sub name'), max_length=255, blank=True, null=True) sub_name = models.CharField(_('sub name'), max_length=255, blank=True, null=True)
name = models.CharField(_('name'), max_length=255, blank=True, null=True) name = models.CharField(_('name'), max_length=255, blank=True, null=True)
value = models.FloatField(_('value'), blank=True, null=True) value = models.FloatField(_('value'), blank=True, null=True)
decs = models.TextField(_('description'), blank=True, null=True) desc = models.TextField(_('description'), blank=True, null=True)
dish_title = models.CharField(_('dish title'), max_length=255, blank=True, null=True) dish_title = models.CharField(_('dish title'), max_length=255, blank=True, null=True)
class Meta: class Meta:

View File

@ -1,11 +1,14 @@
import json
from pprint import pprint
from django.db.models import Q from django.db.models import Q
from account.transfer_data import STOP_LIST from account.transfer_data import STOP_LIST
from transfer.models import Reviews, ReviewTexts, Inquiries from review.models import Inquiries as NewInquiries, Review
from transfer.models import Reviews, ReviewTexts, Inquiries, GridItems
from transfer.serializers.grid import GridItemsSerializer
from transfer.serializers.inquiries import InquiriesSerializer from transfer.serializers.inquiries import InquiriesSerializer
from transfer.serializers.reviews import LanguageSerializer, ReviewSerializer, Establishment from transfer.serializers.reviews import LanguageSerializer, ReviewSerializer, Establishment
from pprint import pprint
import json
def transfer_languages(): def transfer_languages():
@ -98,23 +101,11 @@ def transfer_reviews():
def transfer_inquiries(): def transfer_inquiries():
# отфильтровать по review, account, establishment reviews = Review.objects.all().values_list('old_id', flat=True)
# TODO: нужно ли переносить данные у которых нет привязки к аккаунту? .filter(account__isnull=False)
inquiries = Inquiries.objects.exclude( inquiries = Inquiries.objects.exclude(
Q(review__reviewer_id__lte=0) | # + Q(account__confirmed_at__isnull=True) |
Q(review__reviewer_id__isnull=True) | # + Q(account__email__in=STOP_LIST)
Q(review__mark__isnull=True) | # + ).filter(review_id__in=list(reviews))
Q(review__reviewtexts__text__isnull=True) | # +
Q(review__reviewtexts__locale__isnull=True) | # +
Q(review__establishment__type__isnull=True) | # +
Q(review__establishment__type='Wineyard') | # +
Q(review__establishment__location__timezone__isnull=True) | # +
Q(review__establishment__location__isnull=True) | # +
Q(account__confirmed_at__isnull=True) | # +
Q(account__email__in=STOP_LIST) | # +
Q(review_id__in=(
47558, 43703, 89320, 92150, 90162, 113639, 92084, 96145, 92492, 92489, 92497, 116790, 116930, 114799))
)
serialized_data = InquiriesSerializer(data=list(inquiries.values()), many=True) serialized_data = InquiriesSerializer(data=list(inquiries.values()), many=True)
if serialized_data.is_valid(): if serialized_data.is_valid():
@ -123,10 +114,24 @@ def transfer_inquiries():
pprint(f"Inquiries serializer errors: {serialized_data.errors}") pprint(f"Inquiries serializer errors: {serialized_data.errors}")
def transfer_grid():
inquiries = NewInquiries.objects.all().values_list('old_id', flat=True)
grids = GridItems.objects.filter(inquiry_id__in=list(inquiries))
serialized_data = GridItemsSerializer(data=list(grids.values()), many=True)
if serialized_data.is_valid():
serialized_data.save()
else:
pprint(f"GridItems serializer errors: {serialized_data.errors}")
data_types = { data_types = {
"overlook": [ "overlook": [
transfer_languages, transfer_languages,
transfer_reviews transfer_reviews
], ],
'inquiries': [transfer_inquiries] 'inquiries': [
transfer_inquiries,
transfer_grid,
]
} }

View File

@ -32,7 +32,6 @@ class Command(BaseCommand):
'inquiries', # №6 - перенос запросов оценок 'inquiries', # №6 - перенос запросов оценок
'wine_characteristics', 'wine_characteristics',
'product', 'product',
'comment',
] ]
def handle(self, *args, **options): def handle(self, *args, **options):

View File

@ -1123,7 +1123,7 @@ class GridItems(MigrateMixin):
sub_item_name = models.CharField(max_length=255, blank=True, null=True) sub_item_name = models.CharField(max_length=255, blank=True, null=True)
item_name = models.CharField(max_length=255, blank=True, null=True) item_name = models.CharField(max_length=255, blank=True, null=True)
value = models.FloatField(blank=True, null=True) value = models.FloatField(blank=True, null=True)
decs = models.TextField(blank=True, null=True) desc = models.TextField(blank=True, null=True)
dish_title = models.CharField(max_length=255, blank=True, null=True) dish_title = models.CharField(max_length=255, blank=True, null=True)
class Meta: class Meta:

View File

@ -0,0 +1,38 @@
from rest_framework import serializers
from review.models import Inquiries, GridItems
class GridItemsSerializer(serializers.Serializer):
id = serializers.IntegerField()
created_at = serializers.DateTimeField(format='%m-%d-%Y %H:%M:%S')
inquiry_id = serializers.IntegerField()
sub_item_name = serializers.CharField(allow_null=True, allow_blank=True)
item_name = serializers.CharField(allow_null=True, allow_blank=True)
value = serializers.FloatField(allow_null=True)
desc = serializers.CharField(allow_null=True, allow_blank=True)
dish_title = serializers.CharField(allow_null=True, allow_blank=True)
def validate(self, data):
data.update({
'old_id': data.pop('id'),
'created': data.pop('created_at'),
'sub_name': data.pop('sub_item_name'),
'name': data.pop('item_name'),
'inquiry': self.get_inquiry(data),
})
data.pop('inquiry_id')
return data
def create(self, validated_data):
try:
return GridItems.objects.create(**validated_data)
except Exception as e:
raise ValueError(f"Error creating GridItems with {validated_data}: {e}")
@staticmethod
def get_inquiry(data):
inquiry = Inquiries.objects.filter(old_id=data['inquiry_id']).first()
if not inquiry:
raise ValueError(f"Inquiries not found with old_id {data['inquiry_id']}")
return inquiry

View File

@ -12,7 +12,6 @@ services:
MYSQL_PASSWORD: octosecret123 MYSQL_PASSWORD: octosecret123
MYSQL_ROOT_PASSWORD: rootPassword MYSQL_ROOT_PASSWORD: rootPassword
volumes: volumes:
- .:/code
- gm-mysql_db:/var/lib/mysql - gm-mysql_db:/var/lib/mysql