Tengo un modelo llamado Móviles con 2 Campos: Etiquetas y Precio

Estoy tratando de averiguar cómo pasar los campos de este modelo a la vista.

Y serializarlos


Serializers.py

class DeviceSerializer(serializers.ModelSerializer):
class Meta:
    model = Mobiles
    fields = ['price']

class LabelSerializer(serializers.ModelSerializer):
class Meta:
    model = Mobiles
    fields = ['labels']

class ChartData(APIView):

def get(self,request,format=None):
    dataset = Mobiles.objects.all()
    serializer = DeviceSerializer(dataset,many=True)
    serializer2 = LabelSerializer(dataset,many=True)
    price = serializer.data 
    labels = serializer2.data  
    data = {
        "labels":labels,
        "price":price,
    }
    return Response(data)

Esto es lo que obtengo:

{
    "price": [
        {
            "price": 100
        },
        {
            "price": 101
        },
        {
            "price": 102
        }
    ],

 "labels": [
        {
            "labels": "A"
        },
        {
            "labels": "B"
        },
        {
            "labels": "C"
        }
    ]
}

Pero debería ser así:


{
    "price": [
        "100",
        "101",
        "102"
    ],
    "labels": [
        "A",
        "B",
        "C"
    ]
}

Gracias por cualquier ayuda !!

0
user12001212 3 oct. 2019 a las 09:06

1 respuesta

La mejor respuesta

Usted podría hacer esto:

data = {
    "labels":[item["labels"] for item in labels],
    "price":[item["price"] for item in price],
}

Pero solo puedo advertirle sobre el diseño completo: las "listas paralelas" (dos o más listas que coinciden en la posición) es una receta segura para el código frágil (si alguna de la lista se cambia de todos modos, entonces las posiciones ya no coinciden y sus datos están irremediablemente dañados). Una lista de dictados {"label", "price"} es más segura, y si el código del cliente quiere construir listas paralelas, PUEDE hacerlo desde esta lista de dictados.

0
bruno desthuilliers 3 oct. 2019 a las 11:10