tags translation
This commit is contained in:
parent
d1699e001e
commit
660c8e791b
|
|
@ -113,7 +113,7 @@ class EstablishmentQuerySet(models.QuerySet):
|
|||
def with_base_related(self):
|
||||
"""Return qs with related objects."""
|
||||
return self.select_related('address', 'establishment_type'). \
|
||||
prefetch_related('tags')
|
||||
prefetch_related('tags', 'tags__translation')
|
||||
|
||||
def with_schedule(self):
|
||||
"""Return qs with related schedule."""
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ class NewsQuerySet(TranslationQuerysetMixin):
|
|||
|
||||
def with_base_related(self):
|
||||
"""Return qs with related objects."""
|
||||
return self.select_related('news_type', 'country').prefetch_related('tags')
|
||||
return self.select_related('news_type', 'country').prefetch_related('tags', 'tags__translation')
|
||||
|
||||
def with_extended_related(self):
|
||||
"""Return qs with related objects."""
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ class ProductQuerySet(models.QuerySet):
|
|||
|
||||
def with_base_related(self):
|
||||
return self.select_related('product_type', 'establishment') \
|
||||
.prefetch_related('product_type__subtypes')
|
||||
.prefetch_related('product_type__subtypes', 'tags', 'tags__translation')
|
||||
|
||||
def with_extended_related(self):
|
||||
"""Returns qs with almost all related objects."""
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ from django.utils.translation import gettext_lazy as _
|
|||
|
||||
from configuration.models import TranslationSettings
|
||||
from location.models import Country
|
||||
from utils.models import TJSONField, TagsTranslationModelMixin
|
||||
from utils.models import TJSONField
|
||||
|
||||
|
||||
class TagQuerySet(models.QuerySet):
|
||||
|
|
@ -29,7 +29,7 @@ class TagQuerySet(models.QuerySet):
|
|||
return self.filter(category__establishment_types__index_name=index_name)
|
||||
|
||||
|
||||
class Tag(models.Model, TagsTranslationModelMixin):
|
||||
class Tag(models.Model):
|
||||
"""Tag model."""
|
||||
|
||||
label = TJSONField(blank=True, null=True, default=None,
|
||||
|
|
@ -51,6 +51,10 @@ class Tag(models.Model, TagsTranslationModelMixin):
|
|||
translation = models.ForeignKey('translation.SiteInterfaceDictionary', on_delete=models.SET_NULL,
|
||||
null=True, related_name='tag', verbose_name=_('Translation'))
|
||||
|
||||
@property
|
||||
def label_indexing(self):
|
||||
return self.translation.text
|
||||
|
||||
objects = TagQuerySet.as_manager()
|
||||
|
||||
class Meta:
|
||||
|
|
@ -121,7 +125,7 @@ class TagCategoryQuerySet(models.QuerySet):
|
|||
return self.exclude(tags__isnull=switcher)
|
||||
|
||||
|
||||
class TagCategory(models.Model, TagsTranslationModelMixin):
|
||||
class TagCategory(models.Model):
|
||||
"""Tag base category model."""
|
||||
|
||||
STRING = 'string'
|
||||
|
|
@ -156,6 +160,10 @@ class TagCategory(models.Model, TagsTranslationModelMixin):
|
|||
translation = models.OneToOneField('translation.SiteInterfaceDictionary', on_delete=models.SET_NULL,
|
||||
null=True, related_name='tag_category', verbose_name=_('Translation'))
|
||||
|
||||
@property
|
||||
def label_indexing(self):
|
||||
return self.translation.text
|
||||
|
||||
objects = TagCategoryQuerySet.as_manager()
|
||||
|
||||
class Meta:
|
||||
|
|
|
|||
|
|
@ -2,15 +2,25 @@
|
|||
from rest_framework import serializers
|
||||
from rest_framework.fields import SerializerMethodField
|
||||
|
||||
from establishment.models import Establishment
|
||||
from establishment.models import EstablishmentType
|
||||
from establishment.models import Establishment, EstablishmentType
|
||||
from news.models import News
|
||||
from news.models import NewsType
|
||||
from tag import models
|
||||
from utils.exceptions import BindingObjectNotFound
|
||||
from utils.exceptions import ObjectAlreadyAdded
|
||||
from utils.exceptions import RemovedBindingObjectNotFound
|
||||
from utils.exceptions import BindingObjectNotFound, ObjectAlreadyAdded, RemovedBindingObjectNotFound
|
||||
from utils.serializers import TranslatedField
|
||||
from utils.models import get_default_locale, get_language, to_locale
|
||||
|
||||
|
||||
def translate_obj(obj):
|
||||
if not obj.translation or not isinstance(obj.translation.text, dict):
|
||||
return None
|
||||
try:
|
||||
field = obj.translation.text
|
||||
return field.get(to_locale(get_language()),
|
||||
field.get(get_default_locale(),
|
||||
next(iter(field.values()))))
|
||||
except StopIteration:
|
||||
return None
|
||||
|
||||
|
||||
class TagBaseSerializer(serializers.ModelSerializer):
|
||||
|
|
@ -19,8 +29,11 @@ class TagBaseSerializer(serializers.ModelSerializer):
|
|||
def get_extra_kwargs(self):
|
||||
return super().get_extra_kwargs()
|
||||
|
||||
label_translated = TranslatedField()
|
||||
index_name = serializers.CharField(source='value', read_only=True, allow_null=True)
|
||||
label_translated = serializers.SerializerMethodField(read_only=True, allow_null=True)
|
||||
|
||||
def get_label_translated(self, obj):
|
||||
return translate_obj(obj)
|
||||
|
||||
class Meta:
|
||||
"""Meta class."""
|
||||
|
|
@ -47,8 +60,10 @@ class TagBackOfficeSerializer(TagBaseSerializer):
|
|||
|
||||
class TagCategoryProductSerializer(serializers.ModelSerializer):
|
||||
"""SHORT Serializer for TagCategory"""
|
||||
label_translated = serializers.SerializerMethodField(read_only=True, allow_null=True)
|
||||
|
||||
label_translated = TranslatedField()
|
||||
def get_label_translated(self, obj):
|
||||
return translate_obj(obj)
|
||||
|
||||
class Meta:
|
||||
"""Meta class."""
|
||||
|
|
@ -56,7 +71,6 @@ class TagCategoryProductSerializer(serializers.ModelSerializer):
|
|||
model = models.TagCategory
|
||||
fields = (
|
||||
'id',
|
||||
'label_translated',
|
||||
'index_name',
|
||||
)
|
||||
|
||||
|
|
@ -64,8 +78,8 @@ class TagCategoryProductSerializer(serializers.ModelSerializer):
|
|||
class TagCategoryBaseSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for model TagCategory."""
|
||||
|
||||
label_translated = TranslatedField()
|
||||
tags = SerializerMethodField()
|
||||
tags = TagBaseSerializer(many=True, allow_null=True)
|
||||
label_translated = serializers.SerializerMethodField(read_only=True, allow_null=True)
|
||||
|
||||
class Meta:
|
||||
"""Meta class."""
|
||||
|
|
@ -78,33 +92,17 @@ class TagCategoryBaseSerializer(serializers.ModelSerializer):
|
|||
'tags',
|
||||
)
|
||||
|
||||
def get_tags(self, obj):
|
||||
query_params = dict(self.context['request'].query_params)
|
||||
|
||||
if len(query_params) > 1:
|
||||
return []
|
||||
|
||||
params = {}
|
||||
if 'establishment_type' in query_params:
|
||||
params = {
|
||||
'establishments__isnull': False,
|
||||
}
|
||||
elif 'product_type' in query_params:
|
||||
params = {
|
||||
'products__isnull': False,
|
||||
}
|
||||
|
||||
tags = obj.tags.filter(**params).distinct()
|
||||
return TagBaseSerializer(instance=tags, many=True, read_only=True).data
|
||||
def get_label_translated(self, obj):
|
||||
return translate_obj(obj)
|
||||
|
||||
|
||||
class FiltersTagCategoryBaseSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for model TagCategory."""
|
||||
|
||||
label_translated = TranslatedField()
|
||||
filters = SerializerMethodField()
|
||||
param_name = SerializerMethodField()
|
||||
type = SerializerMethodField()
|
||||
label_translated = serializers.SerializerMethodField(allow_null=True, read_only=True)
|
||||
|
||||
class Meta:
|
||||
"""Meta class."""
|
||||
|
|
@ -127,6 +125,9 @@ class FiltersTagCategoryBaseSerializer(serializers.ModelSerializer):
|
|||
return 'wine_colors_id__in'
|
||||
return 'tags_id__in'
|
||||
|
||||
def get_label_translated(self, obj):
|
||||
return translate_obj(obj)
|
||||
|
||||
def get_fields(self, *args, **kwargs):
|
||||
fields = super(FiltersTagCategoryBaseSerializer, self).get_fields()
|
||||
|
||||
|
|
@ -157,10 +158,13 @@ class FiltersTagCategoryBaseSerializer(serializers.ModelSerializer):
|
|||
class TagCategoryShortSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for model TagCategory."""
|
||||
|
||||
label_translated = TranslatedField()
|
||||
label_translated = serializers.SerializerMethodField(allow_null=True, read_only=True)
|
||||
value_type_display = serializers.CharField(source='get_value_type_display',
|
||||
read_only=True)
|
||||
|
||||
def get_label_translated(self, obj):
|
||||
return translate_obj(obj)
|
||||
|
||||
class Meta(TagCategoryBaseSerializer.Meta):
|
||||
"""Meta class."""
|
||||
fields = [
|
||||
|
|
|
|||
|
|
@ -88,19 +88,6 @@ def translate_field(self, field_name, toggle_field_name=None):
|
|||
return None
|
||||
return translate
|
||||
|
||||
def translate_by_relation(self):
|
||||
def translate(self):
|
||||
field = self.translation.text if self.translation else None
|
||||
if not isinstance(field, dict):
|
||||
return None
|
||||
try:
|
||||
return field.get(to_locale(get_language()),
|
||||
field.get(get_default_locale(),
|
||||
next(iter(field.values()))))
|
||||
except StopIteration:
|
||||
return None
|
||||
return translate
|
||||
|
||||
# todo: refactor this
|
||||
class IndexJSON:
|
||||
|
||||
|
|
@ -147,14 +134,6 @@ class TranslatedFieldsMixin:
|
|||
return value if value else super(TranslatedFieldsMixin, self).__str__()
|
||||
|
||||
|
||||
class TagsTranslationModelMixin:
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(TagsTranslationModelMixin, self).__init__(*args, **kwargs)
|
||||
setattr(self.__class__, 'label_translated',
|
||||
property(translate_by_relation(self)))
|
||||
setattr(self.__class__, 'label_indexing',
|
||||
property(lambda self: self.translation.text))
|
||||
|
||||
class OAuthProjectMixin:
|
||||
"""OAuth2 mixin for project GM"""
|
||||
|
||||
|
|
@ -463,7 +442,8 @@ class HasTagsMixin(models.Model):
|
|||
|
||||
@property
|
||||
def visible_tags(self):
|
||||
return self.tags.filter(category__public=True).prefetch_related('category')\
|
||||
return self.tags.filter(category__public=True).prefetch_related('category',
|
||||
'translation', 'category__translation')\
|
||||
.exclude(category__value_type='bool')
|
||||
|
||||
class Meta:
|
||||
|
|
|
|||
|
|
@ -86,11 +86,11 @@ LOGGING = {
|
|||
'py.warnings': {
|
||||
'handlers': ['console'],
|
||||
},
|
||||
# 'django.db.backends': {
|
||||
# 'handlers': ['console', ],
|
||||
# 'level': 'DEBUG',
|
||||
# 'propagate': False,
|
||||
# },
|
||||
'django.db.backends': {
|
||||
'handlers': ['console', ],
|
||||
'level': 'DEBUG',
|
||||
'propagate': False,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user