django rest framework - tutorial - Serializar texto de elección para IntegerField con opciones
rest framework django 2 (2)
Me gustaría serializar un modelo con muchas opciones como esta:
class House(models.Model):
ACCESSIBILITY_CHOICES = (
(ACCESSIBILITY_FULL, ''Full''),
(ACCESSIBILITY_PARTIAL, ''Partial''),
(ACCESSIBILITY_NONE, ''None'')
)
accessibility = models.IntegerField(max_length=1, choices=ACCESSIBILITY_CHOICES, null=True)
Me encanta que el serializador predeterminado como:
class HouseView(generics.ListCreateAPIView):
model = House
serializer_class = HouseSerializer
class HouseSerializer(serializers.ModelSerializer):
class Meta:
model = House
funciona muy bien si solo quiero el valor entero
{accessibility:1}
Sin embargo, lo que me gustaría obtener
{accessibility:''Full''}
La ayuda es amablemente apreciada. Muchas gracias.
Establezca las opciones en el campo del serializador con los valores sin procesar como ...
ACCESSIBILITY_CHOICES = (
(''Full'', ''Full''),
(''Partial'', ''Partial''),
(''None'', ''None'')
)
Luego, observe cómo se anula el método ''to_native'' para que los valores de cadena se traduzcan a sus equivalentes enteros.
Eso debería darle una API externa que utiliza las representaciones de cadena, pero un backend que usa las representaciones enteras.
Para una API de solo lectura, puede obtener el valor detallado de un campo con opciones mediante el método get_FOO_display
. Este método se agrega automáticamente al establecer opciones en un campo.
Con esto, puede simplemente configurar ese método como fuente para un campo de caracteres y anular el campo predeterminado en su serializador.
En su ejemplo, lo siguiente debe producir el resultado que está buscando si es solo para recuperar el valor, no para escribirlo.
class HouseSerializer(serializers.ModelSerializer):
accessibility = serializers.CharField(source=''get_accessibility_display'')
class Meta:
model = House