fixed product related tags
This commit is contained in:
parent
cf04f55bd3
commit
688bc851bb
23
apps/location/migrations/0025_auto_20191114_0809.py
Normal file
23
apps/location/migrations/0025_auto_20191114_0809.py
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
# Generated by Django 2.2.7 on 2019-11-14 08:09
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('tag', '0014_tag_old_id_meta_product'),
|
||||
('location', '0024_wineregion_tag_categories'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='wineregion',
|
||||
name='tag_categories',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='wineregion',
|
||||
name='tags',
|
||||
field=models.ManyToManyField(blank=True, help_text='attribute from legacy db', related_name='wine_regions', to='tag.Tag'),
|
||||
),
|
||||
]
|
||||
|
|
@ -173,9 +173,9 @@ class WineRegion(models.Model, TranslatedFieldsMixin):
|
|||
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')
|
||||
tags = models.ManyToManyField('tag.Tag', blank=True,
|
||||
related_name='wine_regions',
|
||||
help_text='attribute from legacy db')
|
||||
|
||||
objects = WineRegionQuerySet.as_manager()
|
||||
|
||||
|
|
|
|||
|
|
@ -1,17 +1,18 @@
|
|||
from django.core.management.base import BaseCommand
|
||||
|
||||
from transfer.models import Assemblages
|
||||
from transfer.serializers.product import AssemblageTagSerializer
|
||||
from transfer.models import Cepages
|
||||
from transfer.serializers.tag import CepageTagSerializer
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'Add assemblage tag to product'
|
||||
help = 'Add cepage tags'
|
||||
|
||||
def handle(self, *args, **kwarg):
|
||||
|
||||
errors = []
|
||||
legacy_products = Assemblages.objects.filter(product_id__isnull=False)
|
||||
serialized_data = AssemblageTagSerializer(
|
||||
data=list(legacy_products.values()),
|
||||
queryset = Cepages.objects.all()
|
||||
serialized_data = CepageTagSerializer(
|
||||
data=list(queryset.values()),
|
||||
many=True)
|
||||
if serialized_data.is_valid():
|
||||
serialized_data.save()
|
||||
|
|
@ -1,17 +1,17 @@
|
|||
from django.core.management.base import BaseCommand
|
||||
|
||||
from transfer.models import CepageRegions
|
||||
from transfer.serializers.location import CepageWineRegionsSerializer
|
||||
from transfer.serializers.location import CepageWineRegionSerializer
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'Add cepage tag category to wine region'
|
||||
help = 'Add cepage tag 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(
|
||||
serialized_data = CepageWineRegionSerializer(
|
||||
data=list(legacy_products.values()),
|
||||
many=True)
|
||||
if serialized_data.is_valid():
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
from django.core.management.base import BaseCommand
|
||||
|
||||
from location.models import WineRegion
|
||||
from transfer.models import CepageRegions
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'Cleared wine region tag categories (cleared M2M relation with tag categories)'
|
||||
|
||||
def handle(self, *args, **kwarg):
|
||||
cepage_wine_regions = CepageRegions.objects.exclude(cepage_id__isnull=True) \
|
||||
.exclude(wine_region_id__isnull=True)\
|
||||
.distinct() \
|
||||
.values_list('wine_region_id', flat=True)
|
||||
wine_regions = WineRegion.objects.filter(id__in=tuple(cepage_wine_regions))
|
||||
for region in wine_regions:
|
||||
region.tags.clear()
|
||||
self.stdout.write(self.style.WARNING(f'Cleared wine region tag categories'))
|
||||
|
|
@ -349,7 +349,10 @@ class WineVillage(TransferSerializerMixin):
|
|||
return attrs
|
||||
|
||||
|
||||
class CepageWineRegionsSerializer(TransferSerializerMixin):
|
||||
class CepageWineRegionSerializer(TransferSerializerMixin):
|
||||
|
||||
CATEGORY_LABEL = 'Cepage'
|
||||
CATEGORY_INDEX_NAME = slugify(CATEGORY_LABEL)
|
||||
|
||||
cepage_id = serializers.PrimaryKeyRelatedField(
|
||||
queryset=Cepages.objects.all())
|
||||
|
|
@ -363,15 +366,9 @@ class CepageWineRegionsSerializer(TransferSerializerMixin):
|
|||
|
||||
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'])
|
||||
cepage = validated_data.get('cepage_id')
|
||||
tag = self.get_tag(cepage.name, self.CATEGORY_INDEX_NAME)
|
||||
|
||||
if obj and tag_category not in obj.tag_categories.all():
|
||||
obj.tag_categories.add(tag_category)
|
||||
if obj and tag not in obj.tags.all():
|
||||
obj.tags.add(tag)
|
||||
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()
|
||||
|
|
|
|||
|
|
@ -569,49 +569,3 @@ class ProductNoteSerializer(TransferSerializerMixin):
|
|||
qs = models.Product.objects.filter(old_id=old_id)
|
||||
if qs.exists():
|
||||
return qs.first()
|
||||
|
||||
|
||||
class AssemblageTagSerializer(TransferSerializerMixin):
|
||||
|
||||
percent = serializers.FloatField()
|
||||
cepage_id = serializers.PrimaryKeyRelatedField(
|
||||
queryset=transfer_models.Cepages.objects.all())
|
||||
product_id = serializers.IntegerField()
|
||||
|
||||
class Meta(ProductSerializer.Meta):
|
||||
fields = (
|
||||
'percent',
|
||||
'cepage_id', # tag category
|
||||
'product_id',
|
||||
)
|
||||
|
||||
def validate(self, attrs):
|
||||
tag_category = attrs.pop('cepage_id')
|
||||
tag = str(attrs.pop('percent'))
|
||||
|
||||
attrs['product'] = self.get_product(attrs.pop('product_id'))
|
||||
attrs['tag'] = self.get_tag(tag, self.get_tag_category(tag_category))
|
||||
return attrs
|
||||
|
||||
def create(self, validated_data):
|
||||
obj = validated_data.pop('product', None)
|
||||
tag = validated_data.pop('tag', None)
|
||||
|
||||
if obj and tag:
|
||||
if tag not in obj.tags.all():
|
||||
obj.tags.add(tag)
|
||||
return obj
|
||||
|
||||
def get_tag(self, tag, tag_category):
|
||||
if tag and tag_category:
|
||||
qs = tag_models.Tag.objects.filter(category=tag_category,
|
||||
value=tag)
|
||||
if qs.exists():
|
||||
return qs.first()
|
||||
|
||||
def get_tag_category(self, tag_category):
|
||||
if isinstance(tag_category, transfer_models.Cepages):
|
||||
tag_category = tag_category.name
|
||||
qs = tag_models.TagCategory.objects.filter(index_name=slugify(tag_category))
|
||||
if qs.exists():
|
||||
return qs.first()
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ class AssemblageTagSerializer(TransferSerializerMixin):
|
|||
value = self.get_tag_value(cepage, percent)
|
||||
|
||||
attrs['label'] = {settings.FALLBACK_LOCALE: value}
|
||||
attrs['value'] = slugify(cepage.name)
|
||||
attrs['value'] = slugify(value)
|
||||
attrs['category'] = self.tag_category
|
||||
return attrs
|
||||
|
||||
|
|
@ -42,3 +42,26 @@ class AssemblageTagSerializer(TransferSerializerMixin):
|
|||
def get_tag_value(self, cepage, percent):
|
||||
if cepage and percent:
|
||||
return f'{cepage.name} - {percent}%'
|
||||
|
||||
|
||||
class CepageTagSerializer(TransferSerializerMixin):
|
||||
|
||||
CATEGORY_LABEL = 'Cepage'
|
||||
CATEGORY_INDEX_NAME = slugify(CATEGORY_LABEL)
|
||||
|
||||
name = serializers.CharField()
|
||||
|
||||
class Meta:
|
||||
model = Tag
|
||||
fields = (
|
||||
'name',
|
||||
)
|
||||
|
||||
def validate(self, attrs):
|
||||
|
||||
name = attrs.pop('name')
|
||||
|
||||
attrs['label'] = {settings.FALLBACK_LOCALE: name}
|
||||
attrs['value'] = slugify(name)
|
||||
attrs['category'] = self.tag_category
|
||||
return attrs
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user