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,
|
||||
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()
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user