Добавление члена в сериализатор фреймворка django REST

Я использую сериализатор Django REST framework

У меня есть этот Serializer и класс.

Это сериализация данных и передача в формате json.

class SpotSerializer(serializers.Serializer):
    spot_id = serializers.IntegerField()
    another_id = serializers.IntegerField()


class Spot: 
    def __init__(self, spot_id,another_id)
        self.spot_id = spot_id
        self.another_id = another_id

Теперь я хочу добавить другую переменную, а не член класса, например

class SpotSerializer(serializers.Serializer):
    spot_id = serializers.IntegerField()
    another_id = serializers.IntegerField()
    another_name = Another.objects.get(id=another_id).name // adding

Этот код не показывает ошибку, но в json не появляется поле another_name.

Так возможно ли это?

Да, здесь у вас есть два варианта. Если для вас нормально только читать поле, вы можете использовать SerializerMethodField:

class SpotSerializer(serializers.Serializer):
    spot_id = serializers.IntegerField()
    another_id = serializers.IntegerField()
    another_name = serializers.SerializerMethodField()


    def get_another_name(self, obj):
      return Another.objects.get(id=self.kwargs['another_id']).name

В случае, если вы хотите также обновлять значение, вы можете использовать собственное поле:


class SpotSerializer(serializers.Serializer):
    spot_id = serializers.IntegerField()
    another_id = serializers.IntegerField()
    another_name = AnotherNameField()

class AnotherNameField(serializers.RelatedField):
    def get_queryset(self):
        return Another.objects.all() # maybe pre-filter

    def to_internal_value(self, data):
        # Update the field value as needed

    def to_representation(self, value):
         # Return the "string" value of the field

Я не уверен, как именно второй вариант будет выглядеть в вашем случае, но надеюсь, что это отправная точка.

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