From 605a3e12e1a94f61057c78a06d439e3af4b19c66 Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 13 Jan 2020 15:44:51 +0300 Subject: [PATCH] phone_list field create and update --- apps/establishment/serializers/back.py | 52 ++++++++++++++++++++------ 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/apps/establishment/serializers/back.py b/apps/establishment/serializers/back.py index 23283981..8f3ae884 100644 --- a/apps/establishment/serializers/back.py +++ b/apps/establishment/serializers/back.py @@ -1,16 +1,27 @@ +from django.utils.translation import gettext_lazy as _ from rest_framework import serializers +from account.serializers.common import UserShortSerializer from establishment import models from establishment import serializers as model_serializers +from establishment.models import ContactPhone +from gallery.models import Image +from location.models import Address from location.serializers import AddressDetailSerializer, TranslatedField from main.models import Currency -from location.models import Address from main.serializers import AwardSerializer from utils.decorators import with_base_attributes from utils.serializers import TimeZoneChoiceField -from gallery.models import Image -from django.utils.translation import gettext_lazy as _ -from account.serializers.common import UserShortSerializer + + +def phones_handler(phones_list, establishment): + """ + create or update phones for establishment 35016 string + """ + ContactPhone.objects.filter(establishment=establishment).delete() + + for new_phone in phones_list: + ContactPhone.objects.create(establishment=establishment, phone=new_phone) class EstablishmentListCreateSerializer(model_serializers.EstablishmentBaseSerializer): @@ -37,6 +48,11 @@ class EstablishmentListCreateSerializer(model_serializers.EstablishmentBaseSeria address_id = serializers.PrimaryKeyRelatedField(write_only=True, source='address', queryset=Address.objects.all()) tz = TimeZoneChoiceField() + phones_list = serializers.ListField( + child=serializers.CharField(max_length=20), + allow_empty=True, + write_only=True, + ) class Meta: model = models.Establishment @@ -62,8 +78,15 @@ class EstablishmentListCreateSerializer(model_serializers.EstablishmentBaseSeria 'tags', 'tz', 'address_id', + 'phones_list', ] + def create(self, validated_data): + phones_list = validated_data.pop('phones_list') + instance = super().create(validated_data) + phones_handler(phones_list, instance) + return instance + class EstablishmentRUDSerializer(model_serializers.EstablishmentBaseSerializer): """Establishment create serializer""" @@ -101,6 +124,12 @@ class EstablishmentRUDSerializer(model_serializers.EstablishmentBaseSerializer): 'tags', ] + def update(self, instance, validated_data): + phones_list = validated_data.pop('phones_list') + instance = super().update(instance, validated_data) + phones_handler(phones_list, instance) + return instance + class SocialChoiceSerializers(serializers.ModelSerializer): """SocialChoice serializers.""" @@ -166,7 +195,6 @@ class ContactEmailBackSerializers(model_serializers.PlateSerializer): ] - class PositionBackSerializer(serializers.ModelSerializer): """Position Back serializer.""" @@ -181,6 +209,7 @@ class PositionBackSerializer(serializers.ModelSerializer): 'index_name', ] + # TODO: test decorator @with_base_attributes class EmployeeBackSerializers(serializers.ModelSerializer): @@ -190,24 +219,22 @@ class EmployeeBackSerializers(serializers.ModelSerializer): establishment = serializers.SerializerMethodField() awards = AwardSerializer(many=True, read_only=True) - def get_public_mark(self, obj): """Get last list actual public_mark""" - qs = obj.establishmentemployee_set.actual().order_by('-from_date')\ + qs = obj.establishmentemployee_set.actual().order_by('-from_date') \ .values('establishment__public_mark').first() return qs['establishment__public_mark'] if qs else None - def get_positions(self, obj): """Get last list actual positions""" - est_id = obj.establishmentemployee_set.actual().\ + est_id = obj.establishmentemployee_set.actual(). \ order_by('-from_date').first() if not est_id: return None - qs = obj.establishmentemployee_set.actual()\ - .filter(establishment_id=est_id.establishment_id)\ + qs = obj.establishmentemployee_set.actual() \ + .filter(establishment_id=est_id.establishment_id) \ .prefetch_related('position').values('position') positions = models.Position.objects.filter(id__in=[q['position'] for q in qs]) @@ -216,7 +243,7 @@ class EmployeeBackSerializers(serializers.ModelSerializer): def get_establishment(self, obj): """Get last actual establishment""" - est = obj.establishmentemployee_set.actual().order_by('-from_date')\ + est = obj.establishmentemployee_set.actual().order_by('-from_date') \ .first() if not est: @@ -380,6 +407,7 @@ class EstablishmentNoteListCreateSerializer(EstablishmentNoteBaseSerializer): class EstablishmentAdminListSerializer(UserShortSerializer): """Establishment admin serializer.""" + class Meta: model = UserShortSerializer.Meta.model fields = [