def update_address(self, request, *args, **kwargs): try: instance = self.get_object() serializer = UserAddressSerializer(data=request.data) serializer.is_valid(raise_exception=True) address, created = Address.objects.get_or_create( line1=serializer.validated_data['line1'], locality=serializer.validated_data['locality'], state=serializer.validated_data['state'], country=serializer.validated_data['country'], postcode=serializer.validated_data['postcode'], user=instance) instance.residential_address = address with transaction.atomic(): instance.save() instance.log_user_action( EmailUserAction.ACTION_POSTAL_ADDRESS_UPDATE.format( '{} {} ({})'.format(instance.first_name, instance.last_name, instance.email)), request) serializer = UserSerializer(instance) return Response(serializer.data) except serializers.ValidationError: print(traceback.print_exc()) raise except ValidationError as e: print(traceback.print_exc()) raise serializers.ValidationError(repr(e.error_dict)) except Exception as e: print(traceback.print_exc()) raise serializers.ValidationError(str(e))
def update_address(self, request, *args, **kwargs): try: instance = self.get_object() serializer = UserAddressSerializer(data=request.data) serializer.is_valid(raise_exception=True) address, created = Address.objects.get_or_create( line1 = serializer.validated_data['line1'], locality = serializer.validated_data['locality'], state = serializer.validated_data['state'], country = serializer.validated_data['country'], postcode = serializer.validated_data['postcode'], user = instance ) instance.residential_address = address with transaction.atomic(): instance.save() instance.log_user_action(EmailUserAction.ACTION_POSTAL_ADDRESS_UPDATE.format( '{} {} ({})'.format(instance.first_name, instance.last_name, instance.email)), request) serializer = UserSerializer(instance) return Response(serializer.data) except serializers.ValidationError: print(traceback.print_exc()) raise except ValidationError as e: print(traceback.print_exc()) raise serializers.ValidationError(repr(e.error_dict)) except Exception as e: print(traceback.print_exc()) raise serializers.ValidationError(str(e))
class SaveEmailUserSerializer(serializers.ModelSerializer): first_name = serializers.CharField( allow_blank=True ) # We need allow_blank=True otherwise blank is not allowed by blank=False setting in the model last_name = serializers.CharField( allow_blank=True ) # We need allow_blank=True otherwise blank is not allowed by blank=False setting in the model residential_address = UserAddressSerializer(read_only=True) residential_address_id = serializers.IntegerField(required=False, write_only=True, allow_null=True) # residential_address = UserAddressSerializer() # def create(self, validated_data): # return super(SaveEmailUserSerializer, self).create(validated_data) # def update(self, instance, validated_data): # return super(SaveEmailUserSerializer, self).update(instance, validated_data) def validate_first_name(self, value): # if not value: # raise serializers.ValidationError('First name must not be null.') return value def validate_last_name(self, value): # if not value: # raise serializers.ValidationError('Last name must not be null.') return value def validate(self, data): # return data if not data['first_name'] and not data['last_name']: raise serializers.ValidationError( 'Please fill in at least Given Name(s) field or Last Name field.' ) else: return data class Meta: model = EmailUser fields = ( 'id', 'email', 'first_name', 'last_name', 'residential_address', 'residential_address_id', 'phone_number', 'mobile_number', 'organisation', 'dob', ) read_only_fields = ( # 'id', # 'residential_address', )
class EmailUserAppViewSerializer(serializers.ModelSerializer): residential_address = UserAddressSerializer() identification = DocumentSerializer() class Meta: model = EmailUser fields = ( 'id', 'email', 'first_name', 'last_name', 'dob', 'title', 'organisation', 'residential_address', 'identification', 'email', 'phone_number', 'mobile_number', )
class EmailUserSerializer(serializers.ModelSerializer): full_name = serializers.SerializerMethodField() residential_address = UserAddressSerializer() class Meta: model = EmailUser fields = ( 'id', 'email', 'full_name', 'first_name', 'last_name', 'residential_address', 'phone_number', 'mobile_number', 'organisation', 'dob', ) def get_full_name(self, obj): return obj.get_full_name()