change field parameter in model Guide (gm-241)

This commit is contained in:
Anatoly 2019-11-03 00:24:35 +03:00
parent 22b4b94f1b
commit c14ab722a1
4 changed files with 28 additions and 4 deletions

View File

@ -7,6 +7,7 @@ from rest_framework.reverse import reverse
from rating.models import Rating
from utils.models import BaseAttributes, TJSONField, TranslatedFieldsMixin, ProjectBaseMixin
from utils.querysets import TranslationQuerysetMixin
class NewsType(models.Model):
@ -27,7 +28,7 @@ class NewsType(models.Model):
return self.name
class NewsQuerySet(models.QuerySet):
class NewsQuerySet(TranslationQuerysetMixin):
"""QuerySet for model News"""
def rating_value(self):

View File

@ -21,8 +21,10 @@ class NewsMixinView:
from django.conf import settings
"""Override get_queryset method."""
qs = models.News.objects.published().with_base_related() \
.order_by('-is_highlighted', '-created')
qs = models.News.objects.published() \
.has_translation(self.request.locale) \
.with_base_related() \
.order_by('-is_highlighted', '-created')
country_code = self.request.country_code
if country_code:

View File

@ -11,7 +11,6 @@ from django.http.request import HttpRequest
from django.utils.timezone import datetime
from rest_framework import status
from rest_framework.request import Request
from os.path import exists
logger = logging.getLogger(__name__)

View File

@ -6,6 +6,7 @@ from django.db import models
from django.db.models import Q, F
from utils.methods import get_contenttype
from utils.models import TJSONField
class ContentTypeQuerySetMixin(models.QuerySet):
@ -56,3 +57,24 @@ class RelatedObjectsCountMixin(models.QuerySet):
return self._annotate_related_objects_count()\
.annotate(all_related_count=exp)\
.filter(all_related_count__gt=count)
class TranslationQuerysetMixin(models.QuerySet):
def _get_translatable_fields(self):
"""Get translatable fields from model."""
translatable_fields = []
model = self.model
for field in model._meta.fields:
field_name = field.name
if isinstance(field, TJSONField):
translatable_fields.append(field_name)
return translatable_fields
def _get_translatable_field_filters(self, locale: str):
"""Generate filters for filtering TJSON objects that has necessary locale."""
return {f'{field}__has_key': locale for field in self._get_translatable_fields()}
def has_translation(self, locale: str):
"""Filter objects by locale from request."""
return self.filter(**self._get_translatable_field_filters(locale))