fixed product related tags

This commit is contained in:
Anatoly 2019-11-14 14:05:51 +03:00
parent 688bc851bb
commit 2ca4ab6bb5
2 changed files with 64 additions and 0 deletions

View File

@ -0,0 +1,21 @@
from django.core.management.base import BaseCommand
from transfer.models import Assemblages
from transfer.serializers.product import AssemblageProductTagSerializer
class Command(BaseCommand):
help = 'Add assemblage tag to product'
def handle(self, *args, **kwarg):
errors = []
legacy_products = Assemblages.objects.filter(product_id__isnull=False)
serialized_data = AssemblageProductTagSerializer(
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

@ -569,3 +569,46 @@ class ProductNoteSerializer(TransferSerializerMixin):
qs = models.Product.objects.filter(old_id=old_id)
if qs.exists():
return qs.first()
class AssemblageProductTagSerializer(TransferSerializerMixin):
CATEGORY_LABEL = 'Grape variety'
CATEGORY_INDEX_NAME = slugify(CATEGORY_LABEL)
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):
cepage = attrs.pop('cepage_id')
legacy_tag = str(attrs.pop('percent'))
attrs['product'] = self.get_product(attrs.pop('product_id'))
attrs['tag'] = self.get_tag_object(legacy_tag, self.tag_category, cepage)
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_object(self, tag, tag_category, cepage):
cepage = cepage.name if isinstance(cepage, transfer_models.Cepages) else cepage
if tag and tag_category and cepage:
qs = tag_models.Tag.objects.filter(category=tag_category,
value=slugify(f'{cepage} - {tag}'))
if qs.exists():
return qs.first()