SiteInterfaceDictionary

This commit is contained in:
evgeniy-st 2019-08-20 14:04:04 +03:00
parent 6901978cf1
commit 9f447477c3
6 changed files with 115 additions and 2 deletions

View File

@ -1,7 +1,12 @@
from django.contrib import admin
from translation.models import Language
from translation import models
@admin.register(Language)
@admin.register(models.Language)
class LanguageAdmin(admin.ModelAdmin):
"""Language admin."""
@admin.register(models.SiteInterfaceDictionary)
class SiteInterfaceDictionaryAdmin(admin.ModelAdmin):
"""Site interface dictionary admin conf."""

View File

@ -0,0 +1,30 @@
# Generated by Django 2.2.4 on 2019-08-20 09:58
import django.contrib.postgres.fields.jsonb
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('translation', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='SiteInterfaceDictionary',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(default=django.utils.timezone.now, editable=False, verbose_name='Date created')),
('modified', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
('page', models.CharField(db_index=True, max_length=255, verbose_name='Page')),
('keywords', models.CharField(max_length=255, verbose_name='Keywords')),
('text', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default=None, help_text='{"en":"some text"}', null=True, verbose_name='Text')),
],
options={
'verbose_name': 'Site interface dictionary',
'verbose_name_plural': 'Site interface dictionary',
},
),
]

View File

@ -1,6 +1,8 @@
"""Translation app models."""
from django.contrib.postgres.fields import JSONField
from django.db import models
from django.utils.translation import gettext_lazy as _
from utils.models import ProjectBaseMixin, LocaleManagerMixin
class LanguageQuerySet(models.QuerySet):
@ -34,3 +36,28 @@ class Language(models.Model):
def __str__(self):
"""String method"""
return f'{self.title} ({self.locale})'
class SiteInterfaceDictionaryManager(LocaleManagerMixin):
"""Extended manager for SiteInterfaceDictionary model."""
class SiteInterfaceDictionary(ProjectBaseMixin):
"""Site interface dictionary model."""
page = models.CharField(max_length=255, db_index=True,
verbose_name=_('Page'))
keywords = models.CharField(max_length=255, verbose_name='Keywords')
text = JSONField(_('Text'), null=True, blank=True,
default=None, help_text='{"en":"some text"}')
objects = SiteInterfaceDictionaryManager()
class Meta:
"""Meta class."""
verbose_name = _('Site interface dictionary')
verbose_name_plural = _('Site interface dictionary')
def __str__(self):
return f'{self.page}: {self.keywords}'

View File

@ -12,3 +12,21 @@ class LanguageSerializer(serializers.ModelSerializer):
'title',
'locale'
]
class SiteInterfaceDictionarySerializer(serializers.ModelSerializer):
"""Serializer for model SiteInterfaceDictionary."""
text_trans = serializers.CharField(read_only=True)
text = serializers.JSONField(write_only=True)
class Meta:
"""Meta class."""
model = models.SiteInterfaceDictionary
fields = [
'id',
'page',
'keywords',
'text',
'text_trans',
]

View File

@ -9,4 +9,8 @@ urlpatterns = [
name='languages'),
path('languages/<int:pk>/', views.LanguageRetrieveUpdateDestroyView.as_view(),
name='language'),
path('site/', views.SiteInterfaceDictionaryView.as_view(),
name='site-interface'),
path('site/<int:pk>/', views.SiteInterfaceDictionaryRUDView.as_view(),
name='site-interface-rud'),
]

View File

@ -1,6 +1,7 @@
"""Translation app views."""
from rest_framework import generics, permissions
from translation import models, serializers
from utils.views import JWTGenericViewMixin
# Mixins
@ -22,3 +23,31 @@ class LanguageListCreateView(LanguageViewMixin, generics.ListCreateAPIView):
class LanguageRetrieveUpdateDestroyView(LanguageViewMixin,
generics.RetrieveUpdateDestroyAPIView):
"""Retrieve, Update, Destroy view for model Language"""
class SiteInterfaceDictionaryMixin:
# todo: refactor this
def get_queryset(self):
locale = self._get_locale(self.request) or 'en'
return models.SiteInterfaceDictionary.objects.annotate_localized_fields(
locale=locale)
class SiteInterfaceDictionaryView(JWTGenericViewMixin,
SiteInterfaceDictionaryMixin,
generics.ListCreateAPIView):
"""Site interface dictionary LC view."""
pagination_class = None
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
serializer_class = serializers.SiteInterfaceDictionarySerializer
filter_fields = ['page', 'keywords']
class SiteInterfaceDictionaryRUDView(JWTGenericViewMixin,
SiteInterfaceDictionaryMixin,
generics.RetrieveUpdateDestroyAPIView):
"""Site interface dictionary RUD view."""
permission_classes = (permissions.AllowAny,)
serializer_class = serializers.SiteInterfaceDictionarySerializer