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

View File

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

View File

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

View File

@ -6,6 +6,7 @@ from django.db import models
from django.db.models import Q, F from django.db.models import Q, F
from utils.methods import get_contenttype from utils.methods import get_contenttype
from utils.models import TJSONField
class ContentTypeQuerySetMixin(models.QuerySet): class ContentTypeQuerySetMixin(models.QuerySet):
@ -56,3 +57,24 @@ class RelatedObjectsCountMixin(models.QuerySet):
return self._annotate_related_objects_count()\ return self._annotate_related_objects_count()\
.annotate(all_related_count=exp)\ .annotate(all_related_count=exp)\
.filter(all_related_count__gt=count) .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))