Establishment types

This commit is contained in:
evgeniy-st 2019-10-17 15:17:29 +03:00
parent 19b3502f58
commit 9661de4810
6 changed files with 64 additions and 25 deletions

View File

@ -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'),
),
]

View File

@ -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',

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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