From 2235198198bb74a1402fc7ae537e53545e7b0971 Mon Sep 17 00:00:00 2001 From: "a.gorbunov" Date: Thu, 6 Feb 2020 09:37:57 +0000 Subject: [PATCH] cascade save address --- apps/establishment/serializers/back.py | 18 +++++++++++++++--- apps/location/serializers/common.py | 21 +++++++++++++++++++++ 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/apps/establishment/serializers/back.py b/apps/establishment/serializers/back.py index e6d4e819..a24123b0 100644 --- a/apps/establishment/serializers/back.py +++ b/apps/establishment/serializers/back.py @@ -15,7 +15,8 @@ from establishment import models, serializers as model_serializers from establishment.models import ContactEmail, ContactPhone, EstablishmentEmployee from establishment.serializers.common import ContactPhonesSerializer from gallery.models import Image -from location.serializers import AddressDetailSerializer, TranslatedField +from location.serializers import AddressDetailSerializer, TranslatedField, AddressBaseSerializer, \ + AddressEstablishmentSerializer from main import models as main_models from main.models import Currency from main.serializers import AwardSerializer @@ -57,9 +58,10 @@ class EstablishmentListCreateSerializer(model_serializers.EstablishmentBaseSeria address_id = serializers.PrimaryKeyRelatedField( source='address', queryset=models.Address.objects.all(), - write_only=True + write_only=True, + required=False, ) - address = AddressDetailSerializer(read_only=True, allow_null=True) + address = AddressEstablishmentSerializer(allow_null=True) transliterated_name = serializers.CharField( required=False, allow_null=True, allow_blank=True ) @@ -164,7 +166,17 @@ class EstablishmentListCreateSerializer(model_serializers.EstablishmentBaseSeria ) validated_data['slug'] = slug + if 'address' in validated_data: + address_fields = validated_data.pop('address') + address_instance = get_object_or_404(models.Address, id=address_fields['id'] or None) + address_id = getattr(address_instance, 'id') + + models.Address.objects.filter(id=address_id).update(**address_fields) + + validated_data['address_id'] = address_id + instance = super().create(validated_data) + phones_handler(phones_list, instance) emails_handler(emails_list, instance) return instance diff --git a/apps/location/serializers/common.py b/apps/location/serializers/common.py index 7936d3c3..4293485d 100644 --- a/apps/location/serializers/common.py +++ b/apps/location/serializers/common.py @@ -207,6 +207,27 @@ class AddressBaseSerializer(serializers.ModelSerializer): return attrs +class AddressEstablishmentSerializer(AddressBaseSerializer): + """Address serializer.""" + + id = serializers.IntegerField(required=True) + street_name_1 = serializers.CharField(required=False, default='') + street_name_2 = serializers.CharField(required=False, default='') + number = serializers.IntegerField(required=False, default=0) + postal_code = serializers.CharField(required=False, default='') + + class Meta(AddressBaseSerializer.Meta): + """Meta class.""" + + fields = AddressBaseSerializer.Meta.fields + ( + 'id', + 'street_name_1', + 'street_name_2', + 'number', + 'postal_code', + ) + + class AddressDetailSerializer(AddressBaseSerializer): """Address serializer."""