Добавление члена в сериализатор фреймворка 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
Я не уверен, как именно второй вариант будет выглядеть в вашем случае, но надеюсь, что это отправная точка.