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