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.models import ContactEmail, ContactPhone, EstablishmentEmployee
from establishment.serializers.common import ContactPhonesSerializer from establishment.serializers.common import ContactPhonesSerializer
from gallery.models import Image 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 import models as main_models
from main.models import Currency from main.models import Currency
from main.serializers import AwardSerializer from main.serializers import AwardSerializer
@ -57,9 +58,10 @@ class EstablishmentListCreateSerializer(model_serializers.EstablishmentBaseSeria
address_id = serializers.PrimaryKeyRelatedField( address_id = serializers.PrimaryKeyRelatedField(
source='address', source='address',
queryset=models.Address.objects.all(), 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( transliterated_name = serializers.CharField(
required=False, allow_null=True, allow_blank=True required=False, allow_null=True, allow_blank=True
) )
@ -164,7 +166,17 @@ class EstablishmentListCreateSerializer(model_serializers.EstablishmentBaseSeria
) )
validated_data['slug'] = slug 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) instance = super().create(validated_data)
phones_handler(phones_list, instance) phones_handler(phones_list, instance)
emails_handler(emails_list, instance) emails_handler(emails_list, instance)
return instance return instance

View File

@ -207,6 +207,27 @@ class AddressBaseSerializer(serializers.ModelSerializer):
return attrs 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): class AddressDetailSerializer(AddressBaseSerializer):
"""Address serializer.""" """Address serializer."""