multi-language feature titles
This commit is contained in:
parent
9f79e26671
commit
3c96a98344
11 changed files with 101 additions and 44 deletions
|
@ -4,9 +4,10 @@ import os
|
|||
from django.conf import settings
|
||||
from django.core.files import File
|
||||
from django.http import Http404, HttpResponse
|
||||
|
||||
from rest_framework.decorators import detail_route
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.viewsets import ModelViewSet, ReadOnlyModelViewSet, ViewSet
|
||||
from rest_framework.viewsets import ReadOnlyModelViewSet, ViewSet
|
||||
|
||||
from .cache import AccessCachedViewSetMixin, CachedViewSetMixin
|
||||
from .models import FEATURE_TYPES, Feature, Level, Package, Source
|
||||
|
@ -70,6 +71,7 @@ class FeatureTypeViewSet(ViewSet):
|
|||
"""
|
||||
Get Feature types
|
||||
"""
|
||||
|
||||
def list(self, request, version=None):
|
||||
serializer = FeatureTypeSerializer(FEATURE_TYPES.values(), many=True, context={'request': request})
|
||||
return Response(serializer.data)
|
||||
|
@ -81,13 +83,10 @@ class FeatureTypeViewSet(ViewSet):
|
|||
return Response(serializer.data)
|
||||
|
||||
|
||||
ParentModelViewSet = ModelViewSet if settings.DIRECT_EDITING else ReadOnlyModelViewSet
|
||||
|
||||
|
||||
class FeatureViewSet(ParentModelViewSet):
|
||||
class FeatureViewSet(ReadOnlyModelViewSet):
|
||||
"""
|
||||
Get all Map Features including ones that are only part of the current session
|
||||
"""
|
||||
queryset = Feature.objects.all()
|
||||
queryset = Feature.objects.all().prefetch_related('featuretitles')
|
||||
serializer_class = FeatureSerializer
|
||||
lookup_value_regex = '[^/]+'
|
||||
|
|
|
@ -40,4 +40,4 @@ class CachedViewSetMixin:
|
|||
|
||||
class AccessCachedViewSetMixin(CachedViewSetMixin):
|
||||
def get_cache_params(self, request):
|
||||
return super().get_cache_params(request)+'___'+'___'.join(get_unlocked_packages(request))
|
||||
return super().get_cache_params(request) + '___' + '___'.join(get_unlocked_packages(request))
|
||||
|
|
|
@ -2,9 +2,11 @@ from collections import OrderedDict, namedtuple
|
|||
|
||||
from django.db import models
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import get_language
|
||||
|
||||
from c3nav.mapdata.models.level import Level
|
||||
from c3nav.mapdata.models.package import Package
|
||||
|
||||
from ..fields import GeometryField
|
||||
|
||||
|
||||
|
@ -12,11 +14,14 @@ class FeatureType(namedtuple('FeatureType', ('name', 'title', 'title_plural', 'g
|
|||
def __init__(self, *args, **kwargs):
|
||||
FEATURE_TYPES[self.name] = self
|
||||
|
||||
|
||||
FEATURE_TYPES = OrderedDict()
|
||||
FeatureType('building', _('Building'), _('Buildings'), 'polygon', '#333333')
|
||||
FeatureType('room', _('Room'), _('Rooms'), 'polygon', '#CCCCCC')
|
||||
FeatureType('outside', _('Outside Area'), _('Outside Areas'), 'polygon', '#EEEEEE')
|
||||
FeatureType('obstacle', _('Obstacle'), _('Obstacles'), 'polygon', '#999999')
|
||||
|
||||
|
||||
# FeatureType('door', _('Door'), 'polygon', '#FF00FF')
|
||||
# FeatureType('step', _('Step'), 'polyline', '#FF0000')
|
||||
# FeatureType('elevator', _('Elevator'), 'polygon', '#99CC00')
|
||||
|
@ -36,9 +41,21 @@ class Feature(models.Model):
|
|||
verbose_name=_('level'))
|
||||
geometry = GeometryField()
|
||||
|
||||
@property
|
||||
def titles(self):
|
||||
return {title.language: title.title for title in self.featuretitles.all()}
|
||||
|
||||
@property
|
||||
def title(self):
|
||||
titles = self.titles
|
||||
lang = get_language()
|
||||
if lang in titles:
|
||||
return titles[lang]
|
||||
return next(iter(titles.values())) if titles else self.name
|
||||
|
||||
|
||||
class FeatureTitle(models.Model):
|
||||
feature = models.ForeignKey('Feature', on_delete=models.CASCADE, related_name='titles',
|
||||
feature = models.ForeignKey('Feature', on_delete=models.CASCADE, related_name='featuretitles',
|
||||
verbose_name=_('map package'))
|
||||
language = models.CharField(max_length=50)
|
||||
title = models.CharField(max_length=50)
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from django.conf import settings
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from rest_framework.exceptions import PermissionDenied
|
||||
from rest_framework.permissions import BasePermission
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ class PackageSerializer(serializers.ModelSerializer):
|
|||
class Meta:
|
||||
model = Package
|
||||
fields = ('name', 'home_repo', 'commit_id', 'depends', 'bounds', 'public')
|
||||
readonly_fields = ('commit_id', )
|
||||
readonly_fields = ('commit_id',)
|
||||
|
||||
|
||||
class SourceSerializer(serializers.ModelSerializer):
|
||||
|
@ -59,4 +59,4 @@ class FeatureSerializer(serializers.ModelSerializer):
|
|||
|
||||
class Meta:
|
||||
model = Feature
|
||||
fields = ('name', 'package', 'level', 'feature_type', 'geometry')
|
||||
fields = ('name', 'title', 'feature_type', 'level', 'titles', 'package', 'geometry')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue