change field parameter in model Guide (gm-241)
This commit is contained in:
parent
22b4b94f1b
commit
c14ab722a1
|
|
@ -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):
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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__)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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))
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user