added command add_cepage_tag_category to link cepage tag category with wine region

This commit is contained in:
Anatoly 2019-11-13 16:30:30 +03:00
parent 2abb474221
commit b56829accc
9 changed files with 93 additions and 6 deletions

View File

View File

@ -0,0 +1,22 @@
from django.core.management.base import BaseCommand
from transfer.models import CepageRegions
from transfer.serializers.location import CepageWineRegionsSerializer
class Command(BaseCommand):
help = 'Add cepage tag category to wine region'
def handle(self, *args, **kwarg):
errors = []
legacy_products = CepageRegions.objects.exclude(cepage_id__isnull=True) \
.exclude(wine_region_id__isnull=True)
serialized_data = CepageWineRegionsSerializer(
data=list(legacy_products.values()),
many=True)
if serialized_data.is_valid():
serialized_data.save()
else:
for d in serialized_data.errors: errors.append(d) if d else None
self.stdout.write(self.style.WARNING(f'Error count: {len(errors)}\nErrors: {errors}'))

View File

@ -0,0 +1,19 @@
# Generated by Django 2.2.7 on 2019-11-13 12:40
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('tag', '0014_tag_old_id_meta_product'),
('location', '0023_auto_20191112_0104'),
]
operations = [
migrations.AddField(
model_name='wineregion',
name='tag_categories',
field=models.ManyToManyField(blank=True, help_text='attribute from legacy db', related_name='wine_regions', to='tag.TagCategory'),
),
]

View File

@ -173,6 +173,9 @@ class WineRegion(models.Model):
description = TJSONField(blank=True, null=True, default=None,
verbose_name=_('description'),
help_text='{"en-GB":"some text"}')
tag_categories = models.ManyToManyField('tag.TagCategory', blank=True,
related_name='wine_regions',
help_text='attribute from legacy db')
objects = WineRegionQuerySet.as_manager()

View File

@ -181,10 +181,10 @@ def update_flags():
data_types = {
"dictionaries": [
# transfer_countries,
# transfer_regions,
# transfer_cities,
# transfer_addresses,
transfer_countries,
transfer_regions,
transfer_cities,
transfer_addresses,
transfer_wine_region,
transfer_wine_sub_region,
transfer_wine_village,

View File

@ -4,6 +4,7 @@ from rest_framework import serializers
from tag import models as tag_models
from django.conf import settings
from product.models import ProductType, ProductSubType, Product
from location.models import WineRegion
from django.utils.text import slugify
@ -109,3 +110,8 @@ class TransferSerializerMixin(serializers.ModelSerializer):
product_qs = Product.objects.filter(old_id=old_id)
if product_qs.exists():
return product_qs.first()
def get_wine_region(self, parent_id):
qs = WineRegion.objects.filter(old_id=parent_id)
if qs.exists():
return qs.first()

View File

@ -1167,6 +1167,17 @@ class Assemblages(MigrateMixin):
db_table = 'assemblages'
class CepageRegions(MigrateMixin):
using = 'legacy'
cepage = models.ForeignKey('Cepages', on_delete=models.DO_NOTHING)
wine_region_id = models.IntegerField()
class Meta:
managed = False
db_table = 'cepage_regions'
class Cepages(MigrateMixin):
using = 'legacy'

View File

@ -5,6 +5,9 @@ from rest_framework import serializers
from location import models
from transfer.mixins import TransferSerializerMixin
from utils.methods import get_point_from_coordinates
from transfer.models import Cepages
from tag.models import TagCategory
from django.utils.text import slugify
class CountrySerializer(serializers.ModelSerializer):
@ -345,7 +348,30 @@ class WineVillage(TransferSerializerMixin):
attrs['wine_region'] = self.get_wine_region(parent_id)
return attrs
def get_wine_region(self, parent_id):
qs = models.WineRegion.objects.filter(old_id=parent_id)
class CepageWineRegionsSerializer(TransferSerializerMixin):
cepage_id = serializers.PrimaryKeyRelatedField(
queryset=Cepages.objects.all())
wine_region_id = serializers.IntegerField()
class Meta(WineRegion.Meta):
fields = [
'cepage_id',
'wine_region_id',
]
def create(self, validated_data):
obj = self.get_wine_region(validated_data['wine_region_id'])
tag_category = self.get_tag_category(validated_data['cepage_id'])
if obj and tag_category not in obj.tag_categories.all():
obj.tag_categories.add(tag_category)
return obj
def get_tag_category(self, tag_category):
if isinstance(tag_category, Cepages):
tag_category = tag_category.name
qs = TagCategory.objects.filter(index_name=slugify(tag_category))
if qs.exists():
return qs.first()