Add tag for product
This commit is contained in:
parent
27bef66398
commit
13db34237b
|
|
@ -1,10 +1,11 @@
|
|||
from django.core.management.base import BaseCommand
|
||||
from django.db import connections
|
||||
from social_django.models import UserSocialAuth
|
||||
from establishment.management.commands.add_position import namedtuplefetchall
|
||||
from account.models import User
|
||||
from tag.models import Tag, TagCategory
|
||||
from product.models import Product
|
||||
from tqdm import tqdm
|
||||
from django.db.models.functions import Lower
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = '''Add add product tags networks from old db to new db.
|
||||
|
|
@ -13,26 +14,89 @@ class Command(BaseCommand):
|
|||
def category_sql(self):
|
||||
with connections['legacy'].cursor() as cursor:
|
||||
cursor.execute('''
|
||||
select DISTINCT
|
||||
id,
|
||||
key_name as category,
|
||||
value_type as value_type
|
||||
from product_key_value_metadata
|
||||
select
|
||||
DISTINCT
|
||||
trim(CONVERT(v.key_name USING utf8)) as category,
|
||||
trim(CONVERT(v.value_type USING utf8)) as value_type
|
||||
FROM product_metadata m
|
||||
JOIN product_key_value_metadata v on v.id = m.product_key_value_metadatum_id
|
||||
|
||||
''')
|
||||
return namedtuplefetchall(cursor)
|
||||
|
||||
def add_category_tag(self):
|
||||
objects = []
|
||||
for c in tqdm(self.category_sql()):
|
||||
cat = TagCategory.objects.filter(index_name=c.category,
|
||||
value_type=c.value_type,
|
||||
label={'en-GB':c.category})
|
||||
if not cat.exists():
|
||||
objects.append(TagCategory(index_name=c.category,
|
||||
value_type=c.value_type,
|
||||
label={'en-GB': c.category}))
|
||||
for c in tqdm(self.category_sql(), desc='Add category tags'):
|
||||
categories = TagCategory.objects.filter(index_name=c.category,
|
||||
value_type=c.value_type
|
||||
)
|
||||
if not categories.exists():
|
||||
objects.append(
|
||||
TagCategory(label={"en-GB": c.category},
|
||||
value_type=c.value_type,
|
||||
index_name=c.category
|
||||
)
|
||||
)
|
||||
TagCategory.objects.bulk_create(objects)
|
||||
self.stdout.write(self.style.WARNING(f'Created tag category.'))
|
||||
self.stdout.write(self.style.WARNING(f'Add or get tag category objects.'))
|
||||
|
||||
def tag_sql(self):
|
||||
with connections['legacy'].cursor() as cursor:
|
||||
cursor.execute('''
|
||||
select
|
||||
DISTINCT
|
||||
trim(CONVERT(m.value USING utf8)) as tag_value,
|
||||
trim(CONVERT(v.key_name USING utf8)) as tag_category
|
||||
FROM product_metadata m
|
||||
join product_key_value_metadata v on v.id = m.product_key_value_metadatum_id
|
||||
''')
|
||||
return namedtuplefetchall(cursor)
|
||||
|
||||
def add_tag(self):
|
||||
objects = []
|
||||
for t in tqdm(self.tag_sql(), desc='Add tags'):
|
||||
category = TagCategory.objects.get(index_name=t.tag_category)
|
||||
|
||||
tag = Tag.objects.filter(label={"en-GB": t.tag_value},
|
||||
category=category,
|
||||
value=t.tag_value
|
||||
)
|
||||
|
||||
if not tag.exists():
|
||||
objects.append(Tag(label={"en-GB": t.tag_value},
|
||||
category=category,
|
||||
value=t.tag_value
|
||||
))
|
||||
Tag.objects.bulk_create(objects)
|
||||
self.stdout.write(self.style.WARNING(f'Add or get tag objects.'))
|
||||
|
||||
def product_sql(self):
|
||||
with connections['legacy'].cursor() as cursor:
|
||||
cursor.execute('''
|
||||
select
|
||||
DISTINCT
|
||||
m.product_id,
|
||||
lower(trim(CONVERT(m.value USING utf8))) as tag_value,
|
||||
trim(CONVERT(v.key_name USING utf8)) as tag_category
|
||||
FROM product_metadata m
|
||||
JOIN product_key_value_metadata v on v.id = m.product_key_value_metadatum_id
|
||||
''')
|
||||
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():
|
||||
products.tags.add(tag)
|
||||
products.save()
|
||||
|
||||
self.stdout.write(self.style.WARNING(f'Add or get tag objects.'))
|
||||
|
||||
def handle(self, *args, **kwargs):
|
||||
self.add_category_tag()
|
||||
self.add_category_tag()
|
||||
self.add_tag()
|
||||
self.add_product_tag()
|
||||
23
apps/tag/migrations/0011_auto_20191112_1203.py
Normal file
23
apps/tag/migrations/0011_auto_20191112_1203.py
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
# Generated by Django 2.2.7 on 2019-11-12 12:03
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('tag', '0010_auto_20191112_0104'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='tagcategory',
|
||||
name='old_id',
|
||||
field=models.IntegerField(blank=True, null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='tagcategory',
|
||||
name='value_type',
|
||||
field=models.CharField(choices=[('string', 'string'), ('list', 'list'), ('integer', 'integer'), ('float', 'float')], default='list', max_length=255, verbose_name='value type'),
|
||||
),
|
||||
]
|
||||
|
|
@ -36,6 +36,7 @@ class Tag(TranslatedFieldsMixin, models.Model):
|
|||
verbose_name=_('Category'))
|
||||
chosen_tag_settings = models.ManyToManyField(Country, through='ChosenTagSettings')
|
||||
priority = models.PositiveIntegerField(null=True, default=0)
|
||||
|
||||
old_id = models.PositiveIntegerField(_('old id'), blank=True, null=True, default=None)
|
||||
|
||||
objects = TagQuerySet.as_manager()
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ THUMBNAIL_DEBUG = True
|
|||
|
||||
|
||||
# ADDED TRANSFER APP
|
||||
INSTALLED_APPS.append('transfer.apps.TransferConfig')
|
||||
# INSTALLED_APPS.append('transfer.apps.TransferConfig')
|
||||
|
||||
|
||||
# DATABASES
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user