diff --git a/apps/authorization/tasks.py b/apps/authorization/tasks.py index c97fbbae..cb186142 100644 --- a/apps/authorization/tasks.py +++ b/apps/authorization/tasks.py @@ -1,10 +1,10 @@ """Authorization app celery tasks.""" import logging -from django.utils.translation import gettext_lazy as _ + from celery import shared_task +from django.utils.translation import gettext_lazy as _ from account import models as account_models -from smtplib import SMTPException logging.basicConfig(format='[%(levelname)s] %(message)s', level=logging.INFO) logger = logging.getLogger(__name__) diff --git a/apps/establishment/migrations/0032_establishmenttag_establishmenttypetagcategory.py b/apps/establishment/migrations/0032_establishmenttag_establishmenttypetagcategory.py index 6efaa57a..ec9966d8 100644 --- a/apps/establishment/migrations/0032_establishmenttag_establishmenttypetagcategory.py +++ b/apps/establishment/migrations/0032_establishmenttag_establishmenttypetagcategory.py @@ -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 import django.db.models.deletion @@ -7,33 +7,29 @@ import django.db.models.deletion class Migration(migrations.Migration): dependencies = [ - ('tag', '0001_initial'), ('establishment', '0031_establishment_slug'), ] 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( name='EstablishmentTag', fields=[ ('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={ 'verbose_name': 'establishment tag', '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', + }, + ), ] diff --git a/apps/establishment/migrations/0033_auto_20191009_0715.py b/apps/establishment/migrations/0033_auto_20191009_0715.py new file mode 100644 index 00000000..5df367d6 --- /dev/null +++ b/apps/establishment/migrations/0033_auto_20191009_0715.py @@ -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'), + ), + ] diff --git a/apps/establishment/models.py b/apps/establishment/models.py index 9ce4eebc..30ca88bd 100644 --- a/apps/establishment/models.py +++ b/apps/establishment/models.py @@ -15,6 +15,7 @@ from elasticsearch_dsl import Q from phonenumber_field.modelfields import PhoneNumberField from collection.models import Collection +from tag.models import Tag, TagCategory from main.models import Award, MetaDataContent from location.models import Address from review.models import Review @@ -76,13 +77,12 @@ class EstablishmentQuerySet(models.QuerySet): def with_base_related(self): """Return qs with related objects.""" - return self.select_related('address') - # todo: fix this - # return self.select_related('address').prefetch_related( - # models.Prefetch('tags', - # MetaDataContent.objects.select_related( - # 'metadata__category')) - # ) + return self.select_related('address', 'establishment_type').prefetch_related( + models.Prefetch('tags', + EstablishmentTag.objects.select_related('tag')), + models.Prefetch('establishment_type__tag_categories', + EstablishmentTypeTagCategory.objects.select_related('tag_category')), + ) def with_extended_related(self): return self.select_related('establishment_type').\ @@ -561,11 +561,11 @@ class EstablishmentTagQuerySet(models.QuerySet): class EstablishmentTag(models.Model): """Establishment tag model.""" tag = models.ForeignKey('tag.Tag', - on_delete=models.SET_NULL, null=True, + on_delete=models.CASCADE, related_name='tags', verbose_name=_('tag')) establishment = models.ForeignKey('establishment.Establishment', - on_delete=models.SET_NULL, null=True, + on_delete=models.CASCADE, related_name='tags', verbose_name=_('establishment')) objects = EstablishmentTagQuerySet.as_manager() @@ -586,11 +586,11 @@ class EstablishmentTypeTagCategoryQuerySet(models.QuerySet): class EstablishmentTypeTagCategory(models.Model): """Tag categories based on establishment type.""" establishment_type = models.ForeignKey(EstablishmentType, - on_delete=models.SET_NULL, null=True, + on_delete=models.CASCADE, related_name='tag_categories', verbose_name=_('establishment type')) tag_category = models.ForeignKey('tag.TagCategory', - on_delete=models.SET_NULL, null=True, + on_delete=models.CASCADE, related_name='est_type_tag_categories', verbose_name=_('tag category')) objects = EstablishmentTypeTagCategoryQuerySet.as_manager() diff --git a/apps/establishment/serializers/back.py b/apps/establishment/serializers/back.py index b15ff51f..766806ad 100644 --- a/apps/establishment/serializers/back.py +++ b/apps/establishment/serializers/back.py @@ -78,6 +78,7 @@ class EstablishmentRUDSerializer(EstablishmentBaseSerializer): class EstablishmentTagCategoryListSerializer(serializers.ModelSerializer): """Serializer for intermediate model EstablishmentTypeTagCategories.""" + id = serializers.IntegerField(source='tag_category.id') label_translated = TranslatedField(source='tag_category.label_translated') tags = TagBaseSerializer(source='tag_category.tags', many=True) diff --git a/apps/search_indexes/documents/establishment.py b/apps/search_indexes/documents/establishment.py index 3a06d4ed..e2147fbc 100644 --- a/apps/search_indexes/documents/establishment.py +++ b/apps/search_indexes/documents/establishment.py @@ -21,27 +21,31 @@ class EstablishmentDocument(Document): properties={ 'id': fields.IntegerField(), '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( properties={ 'id': fields.IntegerField(), '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) - # 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( properties={ 'id': fields.IntegerField(), diff --git a/apps/tag/migrations/0001_initial.py b/apps/tag/migrations/0001_initial.py index 1c146570..543eb035 100644 --- a/apps/tag/migrations/0001_initial.py +++ b/apps/tag/migrations/0001_initial.py @@ -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 import django.db.models.deletion diff --git a/project/settings/base.py b/project/settings/base.py index 8f02f52d..f04788d1 100644 --- a/project/settings/base.py +++ b/project/settings/base.py @@ -282,9 +282,9 @@ SMS_SENDER = 'GM' # EMAIL EMAIL_USE_TLS = True -EMAIL_HOST = 'smtp.yandex.ru' -EMAIL_HOST_USER = 't3st.t3stov.t3stovich@yandex.ru' -EMAIL_HOST_PASSWORD = 'ylhernyutkfbylgk' +EMAIL_HOST = 'smtp.mandrillapp.com' +EMAIL_HOST_USER = 'bbody@gaultmillau.fr' +EMAIL_HOST_PASSWORD = 'FQghjXmS1FmKmlZEpSg6TA' EMAIL_PORT = 587 # Django Rest Swagger