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, description = TJSONField(blank=True, null=True, default=None,
verbose_name=_('description'), verbose_name=_('description'),
help_text='{"en-GB":"some text"}') 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() objects = WineRegionQuerySet.as_manager()

View File

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

View File

@ -4,6 +4,7 @@ from rest_framework import serializers
from tag import models as tag_models from tag import models as tag_models
from django.conf import settings from django.conf import settings
from product.models import ProductType, ProductSubType, Product from product.models import ProductType, ProductSubType, Product
from location.models import WineRegion
from django.utils.text import slugify from django.utils.text import slugify
@ -109,3 +110,8 @@ class TransferSerializerMixin(serializers.ModelSerializer):
product_qs = Product.objects.filter(old_id=old_id) product_qs = Product.objects.filter(old_id=old_id)
if product_qs.exists(): if product_qs.exists():
return product_qs.first() 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' 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): class Cepages(MigrateMixin):
using = 'legacy' using = 'legacy'

View File

@ -5,6 +5,9 @@ from rest_framework import serializers
from location import models from location import models
from transfer.mixins import TransferSerializerMixin from transfer.mixins import TransferSerializerMixin
from utils.methods import get_point_from_coordinates 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): class CountrySerializer(serializers.ModelSerializer):
@ -345,7 +348,30 @@ class WineVillage(TransferSerializerMixin):
attrs['wine_region'] = self.get_wine_region(parent_id) attrs['wine_region'] = self.get_wine_region(parent_id)
return attrs 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(): if qs.exists():
return qs.first() return qs.first()