added command add_cepage_tag_category to link cepage tag category with wine region
This commit is contained in:
parent
2abb474221
commit
b56829accc
0
apps/location/management/__init__.py
Normal file
0
apps/location/management/__init__.py
Normal file
0
apps/location/management/commands/__init__.py
Normal file
0
apps/location/management/commands/__init__.py
Normal file
22
apps/location/management/commands/add_cepage_tag_category.py
Normal file
22
apps/location/management/commands/add_cepage_tag_category.py
Normal 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}'))
|
||||||
19
apps/location/migrations/0024_wineregion_tag_categories.py
Normal file
19
apps/location/migrations/0024_wineregion_tag_categories.py
Normal 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'),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -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()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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'
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user