Estoy guardando datos en un back-end de PostgreSQL a través de Django. Muchos de los campos en mis modelos son DecimalFields configurados arbitrariamente en max_digits y decimales, que corresponden a columnas numéricas en el backend de la base de datos. Los datos en cada columna tienen una precisión (o número de decimales) que no se conoce a priori, y cada dato en una columna dada no necesita tener la misma precisión.Preservando la precisión de salida con Django DecimalField y PostgreSql Campo numérico
Por ejemplo, los argumentos a un modelo pueden ser:
{'dist': Decimal("94.3"), 'dist_e': Decimal("1.2")}
{'dist': Decimal("117"), 'dist_e': Decimal("4")}
donde las claves son los nombres de columna de base de datos.
En la salida, necesito conservar y volver a mostrar esos datos con la precisión con la que se leyeron. En otras palabras, después de consultar la base de datos, los datos mostrados deben verse exactamente como los datos que se leyeron , sin ningún 0 final adicional o faltante en los decimales. Sin embargo, cuando se consulta, ya sea en un shell de django o en la interfaz de administración, todos los datos de DecimalField vuelven con muchos 0 finales.
He visto preguntas similares respondidas por valores monetarios, donde la precisión (2 lugares decimales) es conocida y la misma para todos los datos en una columna determinada. Sin embargo, ¿cómo se puede preservar mejor la precisión exacta representada por los valores decimales en Django y los valores numéricos en PostgreSQL cuando la precisión no es la misma y no se conoce de antemano?
EDIT:
Posiblemente una pieza adicional de utilidad de la información: Al ver la tabla a la que se guardan los datos en una Django dbshell, los muchos arrastran 0 de también están presentes. El valor decimal de python aparentemente se convierte al valor de precisión máximo especificado en el archivo models.py al ser guardado en el backend de PostgreSQL.
Si django está alterando sus números, probablemente necesite escribir un Modelode campo personalizado, ya sea por subclases de DecimalField o por completo comenzando desde cero: -/ – Dave
Sí. Desafortunadamente, la respuesta corta a esta pregunta parece ser que Django no (todavía) admite la columna numérica PostgreSQL de precisión no especificada. Tengo un par de soluciones alternativas en mente para esto, y tan pronto como tenga tiempo para formularlo, haré otra pregunta para comentarios/sugerencias sobre ellas. – krosbonz