Получение значения по умолчанию для поля сериализатора из метода

Я пытаюсь найти способ сделать то, что, как мне казалось, должно быть очень простым. У меня есть сериализатор, принимающий либо адрес (вложенный сериализатор), либо координаты (также вложенный сериализатор). Если пользователь предоставляет адрес, я преобразовываю его с помощью некоторой магии в координаты и хочу предоставить эти координаты в ответе. Вот что у меня есть на данный момент:

class AddressSerializer(serializers.Serializer):
    zip_code = serializers.CharField()
    city = serializers.CharField(required=False)
    street = serializers.CharField(required=False)
    house_number = serializers.CharField(required=False)

class GeoPointSerializer(serializers.Serializer):
    latitude = serializers.FloatField()
    longitude = serializers.FloatField()


class TheSerializer(serializers.Serializer):
    address = AddressSerializer(required=False)
    coordinates = GeoPointSerializer(required=False)

    def validate(self, attrs):
        # check if the user provided either address or coordinates

    def resolve_address_to_coordinates(...):
        ...

и теперь я понятия не имею, как продолжить. Я знаю о SerializerMethodField, который будет работать нормально, за исключением того, что он доступен только для чтения. Затем я играл с атрибутами default и source на поле coordinates, но тоже без успеха. Может ли кто-нибудь помочь мне?

Вернуться на верх