Tôi đang lưu dữ liệu vào chương trình phụ trợ PostgreSQL thông qua Django. Nhiều trường trong các mô hình của tôi là DecimalFields được đặt thành max_digits và decimal_places tùy ý, tương ứng với các cột số trong phần cuối của cơ sở dữ liệu. Dữ liệu trong mỗi cột có độ chính xác (hoặc số chữ số thập phân) không được biết là một số trước là và mỗi mốc trong một cột nhất định không cần có cùng độ chính xác.Bảo toàn độ chính xác đầu ra với Django DecimalField và trường số PostgreSql
Ví dụ, đối số cho một mô hình có thể trông giống như:
{'dist': Decimal("94.3"), 'dist_e': Decimal("1.2")}
{'dist': Decimal("117"), 'dist_e': Decimal("4")}
nơi các phím là tên cột cơ sở dữ liệu.
Khi xuất, tôi cần giữ lại và hiển thị lại dữ liệu đó với độ chính xác mà chúng được đọc. Nói cách khác, sau khi cơ sở dữ liệu được truy vấn, dữ liệu được hiển thị cần phải chính xác giống như dữ liệu đã được đọc , không có dấu 0 bổ sung hoặc bị thiếu trong số thập phân. Khi truy vấn, tuy nhiên, hoặc trong một vỏ django hoặc trong giao diện quản trị, tất cả các dữ liệu DecimalField trở lại với nhiều dấu 0.
Tôi đã thấy các câu hỏi tương tự được trả lời cho các giá trị tiền, trong đó độ chính xác (2 chữ số thập phân) được biết và giống nhau cho tất cả dữ liệu trong một cột nhất định. Tuy nhiên, làm thế nào tốt nhất có thể duy trì độ chính xác chính xác được biểu diễn bằng giá trị thập phân trong giá trị Django và số trong PostgreSQL khi độ chính xác không giống nhau và không được biết trước?
EDIT:
Có thể một mảnh bổ sung hữu ích của thông tin: Khi xem bảng mà dữ liệu được lưu trong một Django dbshell, nhiều trailing 0 cũng có mặt. Giá trị thập phân python dường như được chuyển đổi thành giá trị chính xác tối đa được chỉ định trong tệp models.py khi được lưu vào phần phụ trợ PostgreSQL.
Nếu django đang trộn các số của bạn, có thể bạn sẽ cần phải viết một ModelField tùy chỉnh, hoặc từ phân lớp DecimalField hoặc hoàn toàn bắt đầu từ đầu: -/ – Dave
Có. Thật không may, câu trả lời ngắn cho câu hỏi này dường như là Django không (chưa) hỗ trợ cột số PostgreSQL của độ chính xác không xác định. Tôi có một vài công việc trong tâm trí cho điều này, và ngay sau khi tôi có thời gian để xây dựng nó, tôi sẽ hỏi một câu hỏi khác cho ý kiến / đề xuất về họ. – krosbonz