es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo restaurar enteros desde mi archivo json.dumps (para mostrar en mi gráfico de JavaScript) cuando uso Django

En mi aplicación de Django, tengo un modelo muy básico de gráfico circular con una columna de nombre como CharField y una columna de estadísticas como IntegerField. También tengo un código JavaScript en mi página HTML que muestra un gráfico circular, pero solo puedo hacer que funcione si durocodifico los valores como un array. Esperaba en cambio mostrar los datos de mi modelo/DB como {{ values|safe }} en forma de gráfico circular, extrayendo los valores de los volcados JSON de los datos de mi DB.

Esto es lo que he intentado, como se ve en mi archivo views.py:

def metrics(request):
    pietitle = serializers.serialize('json', PieChart.objects.all(), fields=('title'))
    piestats = serializers.serialize('json', PieChart.objects.all(), fields=('stats'))
    piedata=[[pietitle, piestats]]
    json_data = json.dumps(piedata) 
    data_json = json.loads(json_data)
    return render(request, "metrics.html", {"values": data_json})

En mi página HTML, el mensaje que estoy recibiendo es simplemente “No hay datos”, y estoy bastante seguro de que esto se debe a que cuando serializo el campo de estadísticas, se convierte en una cadena y no se puede interpretar como enteros.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en javascript, python, django, django-views y pie-chart, sugiero la siguiente solución al problema descrito anteriormente:

    Primero, en lugar de serializar los objetos PieChart a json, podríamos crear un diccionario con los datos que queremos mostrar en el gráfico de pie, donde las claves sean los nombres de la porción del pastel y los valores sean las estadísticas correspondientes. Podemos hacer esto utilizando una comprensión de diccionario:

    stats_dict = {obj.title: obj.stats for obj in PieChart.objects.all()}
    

    A continuación, podemos convertir el diccionario en una cadena json utilizando json.dumps:

    stats_json = json.dumps(stats_dict)
    

    En nuestro archivo views.py, luego podemos pasar esta cadena json a nuestra plantilla:

    return render(request, "metrics.html", {"values": stats_json})
    

    Finalmente, en nuestro código javascript en la página html, podemos analizar la cadena json de nuevo a un objeto javascript utilizando JSON.parse y usar el objeto resultante para crear el gráfico de pie. Por ejemplo:

    var statsData = JSON.parse({{ values|safe }});
    
    // ... código para crear el gráfico de pie usando statsData ...
    

    Al utilizar un diccionario de datos en lugar de una lista de objetos serializados, evitamos el problema de convertir el campo de estadísticas en una cadena y podemos manipular fácilmente los datos según nuestras necesidades.

Comments are closed.