From 903db06f0e0aeb4c1c42364a0ef178f7712a17dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80=20=D0=93=D0=BB=D0=B0?= =?UTF-8?q?=D0=B4=D0=BA=D0=B8=D1=85?= Date: Wed, 13 Nov 2019 15:12:48 +0300 Subject: [PATCH] Fix tag add product --- .../management/commands/add_product_tag.py | 36 ++++++++++--------- .../0014_tag_old_id_meta_product.py | 18 ++++++++++ apps/tag/models.py | 3 ++ 3 files changed, 41 insertions(+), 16 deletions(-) create mode 100644 apps/tag/migrations/0014_tag_old_id_meta_product.py diff --git a/apps/product/management/commands/add_product_tag.py b/apps/product/management/commands/add_product_tag.py index e8bb2f3f..97a01376 100644 --- a/apps/product/management/commands/add_product_tag.py +++ b/apps/product/management/commands/add_product_tag.py @@ -43,7 +43,8 @@ class Command(BaseCommand): with connections['legacy'].cursor() as cursor: cursor.execute(''' select - DISTINCT + DISTINCT + m.id as old_id, trim(CONVERT(m.value USING utf8)) as tag_value, trim(CONVERT(v.key_name USING utf8)) as tag_category FROM product_metadata m @@ -56,16 +57,22 @@ class Command(BaseCommand): for t in tqdm(self.tag_sql(), desc='Add tags'): category = TagCategory.objects.get(index_name=t.tag_category) - tag = Tag.objects.filter( + tags = Tag.objects.filter( category=category, value=t.tag_value ) - if not tag.exists(): + if not tags.exists(): objects.append(Tag(label={"en-GB": t.tag_value}, category=category, - value=t.tag_value + value=t.tag_value, + old_id_meta_product=t.old_id )) + else: + qs = tags.filter(old_id_meta_product__isnull=True)\ + .update(old_id_meta_product=t.old_id) + + Tag.objects.bulk_create(objects) self.stdout.write(self.style.WARNING(f'Add or get tag objects.')) @@ -74,6 +81,7 @@ class Command(BaseCommand): cursor.execute(''' select DISTINCT + m.id as old_id_tag, m.product_id, lower(trim(CONVERT(m.value USING utf8))) as tag_value, trim(CONVERT(v.key_name USING utf8)) as tag_category @@ -83,16 +91,12 @@ class Command(BaseCommand): return namedtuplefetchall(cursor) def add_product_tag(self): - objects = [] for t in tqdm(self.product_sql(), desc='Add product tag'): - category = TagCategory.objects.get(index_name=t.tag_category) - tag = Tag.objects.annotate(lower_value=Lower('value')) - tag.filter(lower_value=t.tag_value, category=category) - products = Product.objects.filter(old_id=t.product_id) - if products.exists(): - for p in products: - p.tags.add(*list(tag)) - p.save() + tags = Tag.objects.filter(old_id_meta_product=t.old_id_tag) + product = Product.objects.get(old_id=t.product_id) + for tag in tags: + if product not in tag.products.all(): + product.tags.add(tag) self.stdout.write(self.style.WARNING(f'Add or get tag objects.')) @@ -110,7 +114,7 @@ class Command(BaseCommand): def handle(self, *args, **kwargs): - self.add_category_tag() - self.add_tag() - self.check_tag() + # self.add_category_tag() + # self.add_tag() + # self.check_tag() self.add_product_tag() diff --git a/apps/tag/migrations/0014_tag_old_id_meta_product.py b/apps/tag/migrations/0014_tag_old_id_meta_product.py new file mode 100644 index 00000000..603871d5 --- /dev/null +++ b/apps/tag/migrations/0014_tag_old_id_meta_product.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.7 on 2019-11-13 11:22 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('tag', '0013_auto_20191113_0930'), + ] + + operations = [ + migrations.AddField( + model_name='tag', + name='old_id_meta_product', + field=models.PositiveIntegerField(blank=True, default=None, null=True, verbose_name='old id metadata product'), + ), + ] diff --git a/apps/tag/models.py b/apps/tag/models.py index e5e1fdbe..a35425e8 100644 --- a/apps/tag/models.py +++ b/apps/tag/models.py @@ -39,6 +39,9 @@ class Tag(TranslatedFieldsMixin, models.Model): old_id = models.PositiveIntegerField(_('old id'), blank=True, null=True, default=None) + old_id_meta_product = models.PositiveIntegerField(_('old id metadata product'), + blank=True, null=True, default=None) + objects = TagQuerySet.as_manager() class Meta: