fixed product related tags
This commit is contained in:
parent
688bc851bb
commit
2ca4ab6bb5
|
|
@ -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}'))
|
||||||
|
|
@ -569,3 +569,46 @@ class ProductNoteSerializer(TransferSerializerMixin):
|
||||||
qs = models.Product.objects.filter(old_id=old_id)
|
qs = models.Product.objects.filter(old_id=old_id)
|
||||||
if qs.exists():
|
if qs.exists():
|
||||||
return qs.first()
|
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()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user