cascade save address

This commit is contained in:
a.gorbunov 2020-02-06 09:37:57 +00:00
parent a9f3d3de46
commit 2235198198
2 changed files with 36 additions and 3 deletions

View File

@ -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

View File

@ -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."""