some optimize for employee list
This commit is contained in:
parent
abfd4d7288
commit
a8ea238bfc
|
|
@ -1,3 +1,6 @@
|
||||||
|
from functools import lru_cache
|
||||||
|
|
||||||
|
from django.db.models import F
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
|
|
@ -232,21 +235,32 @@ class EmployeeBackSerializers(serializers.ModelSerializer):
|
||||||
toque_number = serializers.SerializerMethodField()
|
toque_number = serializers.SerializerMethodField()
|
||||||
photo = ImageBaseSerializer(source='crop_image', read_only=True)
|
photo = ImageBaseSerializer(source='crop_image', read_only=True)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
@lru_cache(maxsize=32)
|
||||||
|
def get_qs(obj):
|
||||||
|
return obj.establishmentemployee_set.actual().annotate(
|
||||||
|
public_mark=F('establishment__public_mark'),
|
||||||
|
est_id=F('establishment__id'),
|
||||||
|
est_slug=F('establishment__slug'),
|
||||||
|
toque_number=F('establishment__toque_number'),
|
||||||
|
).order_by('-from_date').first()
|
||||||
|
|
||||||
def get_public_mark(self, obj):
|
def get_public_mark(self, obj):
|
||||||
"""Get last list actual public_mark"""
|
"""Get last list actual public_mark"""
|
||||||
qs = obj.establishmentemployee_set.actual().order_by('-from_date') \
|
qs = self.get_qs(obj)
|
||||||
.values('establishment__public_mark').first()
|
if qs:
|
||||||
return qs['establishment__public_mark'] if qs else None
|
return qs.public_mark
|
||||||
|
return None
|
||||||
|
|
||||||
def get_toque_number(self, obj):
|
def get_toque_number(self, obj):
|
||||||
qs = obj.establishmentemployee_set.actual().order_by('-from_date') \
|
qs = self.get_qs(obj)
|
||||||
.values('establishment__toque_number').first()
|
if qs:
|
||||||
return qs['establishment__toque_number'] if qs else None
|
return qs.toque_number
|
||||||
|
return None
|
||||||
|
|
||||||
def get_positions(self, obj):
|
def get_positions(self, obj):
|
||||||
"""Get last list actual positions"""
|
"""Get last list actual positions"""
|
||||||
est_id = obj.establishmentemployee_set.actual(). \
|
est_id = self.get_qs(obj)
|
||||||
order_by('-from_date').first()
|
|
||||||
|
|
||||||
if not est_id:
|
if not est_id:
|
||||||
return None
|
return None
|
||||||
|
|
@ -261,15 +275,14 @@ class EmployeeBackSerializers(serializers.ModelSerializer):
|
||||||
|
|
||||||
def get_establishment(self, obj):
|
def get_establishment(self, obj):
|
||||||
"""Get last actual establishment"""
|
"""Get last actual establishment"""
|
||||||
est = obj.establishmentemployee_set.actual().order_by('-from_date') \
|
est = self.get_qs(obj)
|
||||||
.first()
|
|
||||||
|
|
||||||
if not est:
|
if not est:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"id": est.establishment.id,
|
"id": est.est_id,
|
||||||
"slug": est.establishment.slug
|
"slug": est.est_slug
|
||||||
}
|
}
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
|
||||||
|
|
@ -177,6 +177,7 @@ class EmployeeListCreateView(generics.ListCreateAPIView):
|
||||||
queryset = models.Employee.objects.all().prefetch_related(
|
queryset = models.Employee.objects.all().prefetch_related(
|
||||||
'establishmentemployee_set',
|
'establishmentemployee_set',
|
||||||
'establishmentemployee_set__establishment',
|
'establishmentemployee_set__establishment',
|
||||||
|
'awards',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user