diff --git a/apps/establishment/migrations/0038_establishmenttype_index_name.py b/apps/establishment/migrations/0038_establishmenttype_index_name.py new file mode 100644 index 00000000..657dbe42 --- /dev/null +++ b/apps/establishment/migrations/0038_establishmenttype_index_name.py @@ -0,0 +1,34 @@ +# Generated by Django 2.2.4 on 2019-10-16 11:33 + +from django.db import migrations, models + + +def fill_establishment_type(apps, schemaeditor): + import ipdb; ipdb.set_trace() + EstablishmentType = apps.get_model('establishment', 'EstablishmentType') + for n, et in enumerate(EstablishmentType.objects.all()): + et.index_name = f'Type {n}' + et.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('establishment', '0037_auto_20191015_1404'), + ] + + operations = [ + migrations.AddField( + model_name='establishmenttype', + name='index_name', + field=models.CharField(blank=True, db_index=True, max_length=50, null=True, unique=True, default=None, verbose_name='Index name'), + ), + migrations.RunPython(fill_establishment_type, migrations.RunPython.noop), + migrations.AlterField( + model_name='establishmenttype', + name='index_name', + field=models.CharField(choices=[('restaurant', 'Restaurant'), ('artisan', 'Artisan'), + ('producer', 'Producer')], db_index=True, max_length=50, + unique=True, verbose_name='Index name'), + ), + ] diff --git a/apps/establishment/models.py b/apps/establishment/models.py index c93bbf89..7466414c 100644 --- a/apps/establishment/models.py +++ b/apps/establishment/models.py @@ -27,8 +27,22 @@ class EstablishmentType(TranslatedFieldsMixin, ProjectBaseMixin): STR_FIELD_NAME = 'name' + # INDEX NAME CHOICES + RESTAURANT = 'restaurant' + ARTISAN = 'artisan' + PRODUCER = 'producer' + + INDEX_NAME_TYPES = ( + (RESTAURANT, _('Restaurant')), + (ARTISAN, _('Artisan')), + (PRODUCER, _('Producer')), + ) + name = TJSONField(blank=True, null=True, default=None, verbose_name=_('Description'), help_text='{"en-GB":"some text"}') + index_name = models.CharField(max_length=50, choices=INDEX_NAME_TYPES, + unique=True, db_index=True, + verbose_name=_('Index name')) use_subtypes = models.BooleanField(_('Use subtypes'), default=True) tag_categories = models.ManyToManyField('tag.TagCategory', related_name='establishment_types', diff --git a/apps/search_indexes/signals.py b/apps/search_indexes/signals.py index f7520b57..0f6a071f 100644 --- a/apps/search_indexes/signals.py +++ b/apps/search_indexes/signals.py @@ -40,12 +40,8 @@ def update_document(sender, **kwargs): for establishment in establishments: registry.update(establishment) - if app_label == 'main': - if model_name == 'metadata': - establishments = Establishment.objects.filter(tags__metadata=instance) - for establishment in establishments: - registry.update(establishment) - if model_name == 'metadatacontent': + if app_label == 'tag': + if model_name == 'tag': establishments = Establishment.objects.filter(tags=instance) for establishment in establishments: registry.update(establishment) @@ -70,12 +66,8 @@ def update_news(sender, **kwargs): for news in qs: registry.update(news) - if app_label == 'main': - if model_name == 'metadata': - qs = News.objects.filter(tags__metadata=instance) - for news in qs: - registry.update(news) - if model_name == 'metadatacontent': + if app_label == 'tag': + if model_name == 'tag': qs = News.objects.filter(tags=instance) for news in qs: registry.update(news) diff --git a/apps/tag/filters.py b/apps/tag/filters.py index 95f56b53..8816f820 100644 --- a/apps/tag/filters.py +++ b/apps/tag/filters.py @@ -1,5 +1,6 @@ """Tag app filters.""" from django_filters import rest_framework as filters +from establishment.models import EstablishmentType from tag import models @@ -18,16 +19,9 @@ class TagCategoryFilterSet(filters.FilterSet): type = filters.MultipleChoiceFilter(choices=TYPE_CHOICES, method='filter_by_type') - # Establishment type choices - RESTAURANT = 'restaurant' - - ESTABLISHMENT_TYPE_CHOICES = ( - (RESTAURANT, 'restaurant'), - ) - - establishment_type = filters.MultipleChoiceFilter( - choices=ESTABLISHMENT_TYPE_CHOICES, - method='filter_by_establishment_type') + establishment_type = filters.ChoiceFilter( + choices=EstablishmentType.INDEX_NAME_TYPES, + method='by_establishment_type') class Meta: """Meta class.""" @@ -44,5 +38,5 @@ class TagCategoryFilterSet(filters.FilterSet): return queryset # todo: filter by establishment type - def filter_by_establishment_type(self, queryset, name, value): - return queryset.for_establishments() + def by_establishment_type(self, queryset, name, value): + return queryset.by_establishment_type(value) diff --git a/apps/tag/models.py b/apps/tag/models.py index 4fa04f8e..d8d32639 100644 --- a/apps/tag/models.py +++ b/apps/tag/models.py @@ -45,6 +45,10 @@ class TagCategoryQuerySet(models.QuerySet): return self.filter(models.Q(establishment_types__isnull=False) | models.Q(establishment_subtypes__isnull=False)) + def by_establishment_type(self, index_name): + """Filter by establishment type index name.""" + return self.filter(establishment_types__index_name=index_name) + def with_tags(self, switcher=True): """Filter by existing tags.""" return self.filter(tags__isnull=not switcher) diff --git a/apps/tag/views.py b/apps/tag/views.py index 622ec849..ea83f3d5 100644 --- a/apps/tag/views.py +++ b/apps/tag/views.py @@ -20,5 +20,6 @@ class TagCategoryViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): filterset_class = filters.TagCategoryFilterSet pagination_class = None permission_classes = (permissions.AllowAny, ) - queryset = models.TagCategory.objects.with_tags().with_base_related() + queryset = models.TagCategory.objects.with_tags().with_base_related().\ + distinct() serializer_class = serializers.TagCategoryBaseSerializer