fix elastic document, fix prefetch and select related

This commit is contained in:
Anatoly 2019-10-09 12:53:35 +03:00
parent 33d2446c5c
commit ca5f588466
8 changed files with 78 additions and 47 deletions

View File

@ -1,10 +1,10 @@
"""Authorization app celery tasks.""" """Authorization app celery tasks."""
import logging import logging
from django.utils.translation import gettext_lazy as _
from celery import shared_task from celery import shared_task
from django.utils.translation import gettext_lazy as _
from account import models as account_models from account import models as account_models
from smtplib import SMTPException
logging.basicConfig(format='[%(levelname)s] %(message)s', level=logging.INFO) logging.basicConfig(format='[%(levelname)s] %(message)s', level=logging.INFO)
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@ -1,4 +1,4 @@
# Generated by Django 2.2.4 on 2019-10-08 07:47 # Generated by Django 2.2.4 on 2019-10-09 07:15
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
@ -7,33 +7,29 @@ import django.db.models.deletion
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('tag', '0001_initial'),
('establishment', '0031_establishment_slug'), ('establishment', '0031_establishment_slug'),
] ]
operations = [ operations = [
migrations.CreateModel(
name='EstablishmentTypeTagCategory',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('establishment_type', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='tag_categories', to='establishment.EstablishmentType', verbose_name='establishment type')),
('tag_category', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='est_type_tag_categories', to='tag.TagCategory', verbose_name='tag category')),
],
options={
'verbose_name': 'establishment type tag categories',
'verbose_name_plural': 'establishment type tag categories',
},
),
migrations.CreateModel( migrations.CreateModel(
name='EstablishmentTag', name='EstablishmentTag',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('establishment', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='tags', to='establishment.Establishment', verbose_name='establishment')),
('tag', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='tags', to='tag.Tag', verbose_name='tag')),
], ],
options={ options={
'verbose_name': 'establishment tag', 'verbose_name': 'establishment tag',
'verbose_name_plural': 'establishment tags', 'verbose_name_plural': 'establishment tags',
}, },
), ),
migrations.CreateModel(
name='EstablishmentTypeTagCategory',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('establishment_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tag_categories', to='establishment.EstablishmentType', verbose_name='establishment type')),
],
options={
'verbose_name': 'establishment type tag categories',
'verbose_name_plural': 'establishment type tag categories',
},
),
] ]

View File

@ -0,0 +1,30 @@
# Generated by Django 2.2.4 on 2019-10-09 07:15
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('tag', '0001_initial'),
('establishment', '0032_establishmenttag_establishmenttypetagcategory'),
]
operations = [
migrations.AddField(
model_name='establishmenttypetagcategory',
name='tag_category',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='est_type_tag_categories', to='tag.TagCategory', verbose_name='tag category'),
),
migrations.AddField(
model_name='establishmenttag',
name='establishment',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tags', to='establishment.Establishment', verbose_name='establishment'),
),
migrations.AddField(
model_name='establishmenttag',
name='tag',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tags', to='tag.Tag', verbose_name='tag'),
),
]

View File

@ -15,6 +15,7 @@ from elasticsearch_dsl import Q
from phonenumber_field.modelfields import PhoneNumberField from phonenumber_field.modelfields import PhoneNumberField
from collection.models import Collection from collection.models import Collection
from tag.models import Tag, TagCategory
from main.models import Award, MetaDataContent from main.models import Award, MetaDataContent
from location.models import Address from location.models import Address
from review.models import Review from review.models import Review
@ -76,13 +77,12 @@ class EstablishmentQuerySet(models.QuerySet):
def with_base_related(self): def with_base_related(self):
"""Return qs with related objects.""" """Return qs with related objects."""
return self.select_related('address') return self.select_related('address', 'establishment_type').prefetch_related(
# todo: fix this models.Prefetch('tags',
# return self.select_related('address').prefetch_related( EstablishmentTag.objects.select_related('tag')),
# models.Prefetch('tags', models.Prefetch('establishment_type__tag_categories',
# MetaDataContent.objects.select_related( EstablishmentTypeTagCategory.objects.select_related('tag_category')),
# 'metadata__category')) )
# )
def with_extended_related(self): def with_extended_related(self):
return self.select_related('establishment_type').\ return self.select_related('establishment_type').\
@ -561,11 +561,11 @@ class EstablishmentTagQuerySet(models.QuerySet):
class EstablishmentTag(models.Model): class EstablishmentTag(models.Model):
"""Establishment tag model.""" """Establishment tag model."""
tag = models.ForeignKey('tag.Tag', tag = models.ForeignKey('tag.Tag',
on_delete=models.SET_NULL, null=True, on_delete=models.CASCADE,
related_name='tags', related_name='tags',
verbose_name=_('tag')) verbose_name=_('tag'))
establishment = models.ForeignKey('establishment.Establishment', establishment = models.ForeignKey('establishment.Establishment',
on_delete=models.SET_NULL, null=True, on_delete=models.CASCADE,
related_name='tags', related_name='tags',
verbose_name=_('establishment')) verbose_name=_('establishment'))
objects = EstablishmentTagQuerySet.as_manager() objects = EstablishmentTagQuerySet.as_manager()
@ -586,11 +586,11 @@ class EstablishmentTypeTagCategoryQuerySet(models.QuerySet):
class EstablishmentTypeTagCategory(models.Model): class EstablishmentTypeTagCategory(models.Model):
"""Tag categories based on establishment type.""" """Tag categories based on establishment type."""
establishment_type = models.ForeignKey(EstablishmentType, establishment_type = models.ForeignKey(EstablishmentType,
on_delete=models.SET_NULL, null=True, on_delete=models.CASCADE,
related_name='tag_categories', related_name='tag_categories',
verbose_name=_('establishment type')) verbose_name=_('establishment type'))
tag_category = models.ForeignKey('tag.TagCategory', tag_category = models.ForeignKey('tag.TagCategory',
on_delete=models.SET_NULL, null=True, on_delete=models.CASCADE,
related_name='est_type_tag_categories', related_name='est_type_tag_categories',
verbose_name=_('tag category')) verbose_name=_('tag category'))
objects = EstablishmentTypeTagCategoryQuerySet.as_manager() objects = EstablishmentTypeTagCategoryQuerySet.as_manager()

View File

@ -78,6 +78,7 @@ class EstablishmentRUDSerializer(EstablishmentBaseSerializer):
class EstablishmentTagCategoryListSerializer(serializers.ModelSerializer): class EstablishmentTagCategoryListSerializer(serializers.ModelSerializer):
"""Serializer for intermediate model EstablishmentTypeTagCategories.""" """Serializer for intermediate model EstablishmentTypeTagCategories."""
id = serializers.IntegerField(source='tag_category.id')
label_translated = TranslatedField(source='tag_category.label_translated') label_translated = TranslatedField(source='tag_category.label_translated')
tags = TagBaseSerializer(source='tag_category.tags', many=True) tags = TagBaseSerializer(source='tag_category.tags', many=True)

View File

@ -21,27 +21,31 @@ class EstablishmentDocument(Document):
properties={ properties={
'id': fields.IntegerField(), 'id': fields.IntegerField(),
'name': fields.ObjectField(attr='name_indexing', 'name': fields.ObjectField(attr='name_indexing',
properties=OBJECT_FIELD_PROPERTIES) properties=OBJECT_FIELD_PROPERTIES),
'tag_categories': fields.ObjectField(properties={
'tag_category': fields.ObjectField(
properties={
'id': fields.IntegerField()
}
)
}),
}) })
establishment_subtypes = fields.ObjectField( establishment_subtypes = fields.ObjectField(
properties={ properties={
'id': fields.IntegerField(), 'id': fields.IntegerField(),
'name': fields.ObjectField(attr='name_indexing', 'name': fields.ObjectField(attr='name_indexing',
properties=OBJECT_FIELD_PROPERTIES) properties={
'id': fields.IntegerField(),
}),
},
multi=True)
tags = fields.ObjectField(
properties={
'tag': fields.ObjectField(properties={
'id': fields.IntegerField(),
}),
}, },
multi=True) multi=True)
# todo: need to fix
# tags = fields.ObjectField(
# properties={
# 'id': fields.IntegerField(attr='metadata.id'),
# 'label': fields.ObjectField(attr='metadata.label_indexing',
# properties=OBJECT_FIELD_PROPERTIES),
# 'category': fields.ObjectField(attr='metadata.category',
# properties={
# 'id': fields.IntegerField(),
# })
# },
# multi=True)
address = fields.ObjectField( address = fields.ObjectField(
properties={ properties={
'id': fields.IntegerField(), 'id': fields.IntegerField(),

View File

@ -1,4 +1,4 @@
# Generated by Django 2.2.4 on 2019-10-08 07:47 # Generated by Django 2.2.4 on 2019-10-09 07:15
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion

View File

@ -282,9 +282,9 @@ SMS_SENDER = 'GM'
# EMAIL # EMAIL
EMAIL_USE_TLS = True EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.yandex.ru' EMAIL_HOST = 'smtp.mandrillapp.com'
EMAIL_HOST_USER = 't3st.t3stov.t3stovich@yandex.ru' EMAIL_HOST_USER = 'bbody@gaultmillau.fr'
EMAIL_HOST_PASSWORD = 'ylhernyutkfbylgk' EMAIL_HOST_PASSWORD = 'FQghjXmS1FmKmlZEpSg6TA'
EMAIL_PORT = 587 EMAIL_PORT = 587
# Django Rest Swagger # Django Rest Swagger