From ee8d133248fdf26358df5ac88525999514cab65d Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Fri, 20 Dec 2019 20:11:58 +0300 Subject: [PATCH] Example for tags creation --- apps/transfer/serializers/tag.py | 6 ++++- apps/translation/models.py | 40 +++++++++++++++++++++++++++++++- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/apps/transfer/serializers/tag.py b/apps/transfer/serializers/tag.py index c47ffafc..4f8ae862 100644 --- a/apps/transfer/serializers/tag.py +++ b/apps/transfer/serializers/tag.py @@ -3,6 +3,7 @@ from django.utils.text import slugify from rest_framework import serializers from tag.models import Tag +from translation.models import SiteInterfaceDictionary from transfer.mixins import TransferSerializerMixin from transfer.models import Cepages @@ -36,8 +37,11 @@ class AssemblageTagSerializer(TransferSerializerMixin): def create(self, validated_data): qs = self.Meta.model.objects.filter(**validated_data) category = validated_data.get('category') + translations = validated_data.pop('label') if not qs.exists() and category: - return super().create(validated_data) + instance = super().create(validated_data) + SiteInterfaceDictionary.objects.update_or_create_for_tag(instance, translations) + return instance def get_tag_value(self, cepage, percent): if cepage and percent: diff --git a/apps/translation/models.py b/apps/translation/models.py index 1d9695fe..7b64dce0 100644 --- a/apps/translation/models.py +++ b/apps/translation/models.py @@ -2,9 +2,9 @@ from django.contrib.postgres.fields import JSONField from django.db import models from django.utils.translation import gettext_lazy as _ +from django.apps import apps from utils.models import ProjectBaseMixin, LocaleManagerMixin - class LanguageQuerySet(models.QuerySet): """QuerySet for model Language""" @@ -50,6 +50,44 @@ class Language(models.Model): class SiteInterfaceDictionaryManager(LocaleManagerMixin): """Extended manager for SiteInterfaceDictionary model.""" + def update_or_create_for_tag(self, tag, translations: dict): + Tag = apps.get_model('tag', 'Tag') + """Creates or updates translation for EXISTING in DB Tag""" + if not tag.pk or not isinstance(tag, Tag): + raise NotImplementedError + if tag.translation: + tag.translation.text = translations + tag.translation.page = 'tag' + tag.translation.keywords = f'tag-{tag.pk}' + else: + trans = SiteInterfaceDictionary({ + 'text': translations, + 'page': 'tag', + 'keywords': f'tag-{tag.pk}' + }) + trans.save() + tag.translation = trans + tag.save() + + def update_or_create_for_tag_category(self, tag_category, translations: dict): + """Creates or updates translation for EXISTING in DB TagCategory""" + TagCategory = apps.get_model('tag', 'TagCategory') + if not tag_category.pk or not isinstance(tag_category, TagCategory): + raise NotImplementedError + if tag_category.translation: + tag_category.translation.text = translations + tag_category.translation.page = 'tag' + tag_category.translation.keywords = f'tag_category-{tag_category.pk}' + else: + trans = SiteInterfaceDictionary({ + 'text': translations, + 'page': 'tag', + 'keywords': f'tag_category-{tag_category.pk}' + }) + trans.save() + tag_category.translation = trans + tag_category.save() + class SiteInterfaceDictionary(ProjectBaseMixin): """Site interface dictionary model."""