Các kiểu dữ liệu cho postgres trong Django ánh xạ tới dấu thời gian timestamp with time zone
và dường như không có tùy chọn nào để thay đổi loại đó.
Theo như tôi biết, bạn có ba lựa chọn:
-
Tận dụng hook của Django để thực thi raw sql sau câu lệnh tạo bảng . Để thực hiện việc này, hãy tạo một thư mục có tên là
sql
trong ứng dụng của bạn và một tệp trong thư mục đó có tên làmymodel.postgres_psycopg2.sql
. Đặt các câu lệnh bảng thay thế của bạn vào đó. -
Viết trường tùy chỉnh để xác định các công cụ sửa đổi cho trường dấu thời gian khi bạn thấy phù hợp. Xem " viết trường mô hình tùy chỉnh ".
-
Giữ nguyên trường django và thực hiện chuyển đổi múi giờ trong ứng dụng của bạn để bạn hoàn toàn chắc chắn rằng mình đang vượt qua thời gian chính xác.
Sở thích cá nhân của tôi đối với tính toàn vẹn của dữ liệu là # 3. Cũng giống như với mã hóa ký tự, nơi bạn luôn muốn chắc chắn rằng mình biết bộ ký tự và đang xử lý chuyển đổi đúng cách, tôi cảm thấy thoải mái hơn nhiều với ngày / giờ có các thuộc tính (bao gồm TZ) được xác định chính xác nhất có thể. Hôm nay, bạn có thể chắc chắn rằng tất cả thông tin đầu vào của bạn sẽ đến ứng dụng của bạn ở UTC, nhưng điều đó có thể thay đổi, cụ thể là nếu dấu thời gian được cung cấp bởi người dùng cuối. Đối với những gì nó đáng giá, tôi sẽ đi xa hơn, chuyển đổi dấu thời gian trong ứng dụng sang UTC và lưu trữ nó trong DB với UTC là múi giờ.