create command for establishment tags

This commit is contained in:
Dmitriy Kuzmenko 2019-10-30 18:47:13 +03:00
parent a0c52d8ef9
commit 58be2491a5
10 changed files with 202 additions and 3 deletions

View File

@ -0,0 +1,18 @@
# Generated by Django 2.2.4 on 2019-10-30 11:49
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('news', '0031_merge_20191029_0858'),
]
operations = [
migrations.AlterField(
model_name='news',
name='old_id',
field=models.PositiveIntegerField(blank=True, default=None, null=True, verbose_name='old id'),
),
]

View File

@ -126,7 +126,7 @@ class News(BaseAttributes, TranslatedFieldsMixin):
(PUBLISHED_EXCLUSIVE, _('Published exclusive')),
)
old_id = models.PositiveIntegerField(_('odl id'), blank=True, null=True, default=None)
old_id = models.PositiveIntegerField(_('old id'), blank=True, null=True, default=None)
news_type = models.ForeignKey(NewsType, on_delete=models.PROTECT,
verbose_name=_('news type'))
title = TJSONField(blank=True, null=True, default=None,

View File

View File

View File

@ -0,0 +1,62 @@
from django.core.management.base import BaseCommand
from establishment.models import Establishment, EstablishmentType
from transfer import models as legacy
from tag.models import Tag, TagCategory
class Command(BaseCommand):
help = 'Add tags values from old db to new db'
def handle(self, *args, **kwargs):
categories = legacy.KeyValueMetadata.objects.all()
existing_establishment = Establishment.objects.filter(old_id__isnull=False)
for category in categories:
ESTABLISHMENT = 1
SHOP = 2
RESTAURANT = 3
WINEYARD = 4
MAPPER = {
RESTAURANT: EstablishmentType.RESTAURANT,
WINEYARD: EstablishmentType.PRODUCER,
}
mapper_values_meta = legacy.KeyValueMetadatumKeyValueMetadatumEstablishments.objects.all()
for key, value in MAPPER.items():
values_meta_id_list = mapper_values_meta.filter(
key_value_metadatum_establishment_id=key
).values_list('key_value_metadatum_id')
est_type, _ = EstablishmentType.objects.get_or_create(index_name=value)
key_value_metadata = legacy.KeyValueMetadata.objects.filter(id__in=values_meta_id_list)
# create TagCategory
for key_value in key_value_metadata:
tag_category, created = TagCategory.objects.get_or_create(
index_name=key_value.key_name,
)
if created:
tag_category.label = {'en-GB': key_value.key_name},
tag_category.value_type = key_value.value_type
tag_category.save()
est_type.tag_categories.add(
tag_category
)
# create Tag
for tag in key_value.metadata_set.filter(
establishment__id__in=list(existing_establishment.values_list('old_id', flat=True))):
new_tag, _ = Tag.objects.get_or_create(
label={'en-GB': tag.value},
value=tag.value,
category=tag_category,
)
est = existing_establishment.get(old_id=tag.establishment_id)
est.tags.add(new_tag)
est.save()

View File

@ -0,0 +1,23 @@
# Generated by Django 2.2.4 on 2019-10-30 11:51
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('tag', '0005_tagcategory_name_indexing'),
]
operations = [
migrations.AddField(
model_name='tag',
name='value',
field=models.CharField(blank=True, default=None, max_length=255, null=True, unique=True, verbose_name='indexing name'),
),
migrations.AddField(
model_name='tagcategory',
name='value_type',
field=models.CharField(choices=[('string', 'string'), ('list', 'list'), ('integer', 'integer')], default='list', max_length=255, verbose_name='value type'),
),
]

View File

@ -0,0 +1,18 @@
# Generated by Django 2.2.4 on 2019-10-30 15:14
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('tag', '0006_auto_20191030_1151'),
]
operations = [
migrations.AlterField(
model_name='tag',
name='value',
field=models.CharField(blank=True, default=None, max_length=255, null=True, verbose_name='indexing name'),
),
]

View File

@ -19,6 +19,8 @@ class Tag(TranslatedFieldsMixin, models.Model):
label = TJSONField(blank=True, null=True, default=None,
verbose_name=_('label'),
help_text='{"en-GB":"some text"}')
value = models.CharField(_('indexing name'), max_length=255, blank=True,
null=True, default=None)
category = models.ForeignKey('TagCategory', on_delete=models.CASCADE,
null=True, related_name='tags',
verbose_name=_('Category'))
@ -72,6 +74,16 @@ class TagCategoryQuerySet(models.QuerySet):
class TagCategory(TranslatedFieldsMixin, models.Model):
"""Tag base category model."""
STRING = 'string'
LIST = 'list'
INTEGER = 'integer'
VALUE_TYPE_CHOICES = (
(STRING, _('string')),
(LIST, _('list')),
(INTEGER, _('integer')),
)
label = TJSONField(blank=True, null=True, default=None,
verbose_name=_('label'),
help_text='{"en-GB":"some text"}')
@ -80,7 +92,10 @@ class TagCategory(TranslatedFieldsMixin, models.Model):
default=None)
public = models.BooleanField(default=False)
index_name = models.CharField(max_length=255, blank=True, null=True,
verbose_name=_('indexing name'), unique=True)
verbose_name=_('indexing name'), unique=True)
value_type = models.CharField(_('value type'), max_length=255,
choices=VALUE_TYPE_CHOICES, default=LIST, )
objects = TagCategoryQuerySet.as_manager()

View File

@ -841,3 +841,57 @@ class Ads(MigrateMixin):
class Meta:
managed = False
db_table = 'ads'
class KeyValueMetadata(MigrateMixin):
using = 'legacy'
key_name = models.CharField(max_length=255, blank=True, null=True)
value_type = models.CharField(max_length=255, blank=True, null=True)
value_list = models.TextField(blank=True, null=True)
created_at = models.DateTimeField()
updated_at = models.DateTimeField()
public = models.IntegerField(blank=True, null=True)
site_id = models.IntegerField(blank=True, null=True)
class Meta:
managed = False
db_table = 'key_value_metadata'
class Metadata(MigrateMixin):
using = 'legacy'
key = models.CharField(max_length=255, blank=True, null=True)
value = models.CharField(max_length=255, blank=True, null=True)
establishment = models.ForeignKey('transfer.Establishments', models.DO_NOTHING, blank=True, null=True)
created_at = models.DateTimeField()
updated_at = models.DateTimeField()
key_value_metadatum = models.ForeignKey('transfer.KeyValueMetadata', models.DO_NOTHING, blank=True, null=True)
class Meta:
managed = False
db_table = 'metadata'
class KeyValueMetadatumEstablishments(MigrateMixin):
using = 'legacy'
name = models.CharField(max_length=255, blank=True, null=True)
created_at = models.DateTimeField()
updated_at = models.DateTimeField()
class Meta:
managed = False
db_table = 'key_value_metadatum_establishments'
class KeyValueMetadatumKeyValueMetadatumEstablishments(MigrateMixin):
using = 'legacy'
key_value_metadatum_id = models.IntegerField(blank=True, null=True)
key_value_metadatum_establishment_id = models.IntegerField(blank=True, null=True)
class Meta:
managed = False
db_table = 'key_value_metadatum_key_value_metadatum_establishments'

View File

@ -15,6 +15,7 @@ class NewsSerializer(serializers.ModelSerializer):
state = serializers.CharField()
country_code = serializers.CharField(allow_null=True)
created_at = serializers.DateTimeField(source='start', format='%m-%d-%Y %H:%M:%S')
summary = serializers.CharField(allow_null=True, allow_blank=True)
class Meta:
model = News
@ -29,6 +30,7 @@ class NewsSerializer(serializers.ModelSerializer):
'news_type',
'locale',
'country_code',
'summary'
)
def validate(self, data):
@ -38,7 +40,7 @@ class NewsSerializer(serializers.ModelSerializer):
'template': self.get_template(data),
'title': self.get_title(data),
'description': self.get_description(data),
'subtitle': self.get_description(data),
'subtitle': self.get_subtitle(data),
'country': self.get_country(data),
})
data.pop('country_code')
@ -82,3 +84,10 @@ class NewsSerializer(serializers.ModelSerializer):
if data['body']:
content = parse_legacy_news_content(data['body'])
return {data['locale']: content}
@staticmethod
def get_subtitle(data):
if 'summary' in data:
content = data.pop('summary')
if content:
return {data['locale']: content}