2012-07-29 29 views
16

Tôi có một dự án mới ở Django 1.4, sử dụng db sqlite. Cũng sử dụng shell_plus của django_extenstions mà không gặp vấn đề gì.Django IPython sqlite than phiền về ngày giờ ngây thơ

Khi tôi cài đặt IPython, cả shellshell_plus bắt đầu phàn nàn về:

/path/to/my/virtualenv/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py:50: 
RuntimeWarning: SQLite received a naive datetime (2012-07-29 13:15:45.229464) while time zone support is active. 

Dường IPython bản thân sử dụng datetimes không biết. Làm thế nào để sửa cái này?

EDIT:

Tôi không muốn vô hiệu hóa hỗ trợ múi giờ của Django.

+0

@PeterStahl đúng, nó không phải là một vấn đề thực sự, miễn là tôi không tạo datetimes từ vỏ và lưu chúng vào mô hình Django, và cũng có thể làm rằng tại thời điểm "không chắc chắn" của năm có thể gần với thay đổi tiết kiệm ánh sáng ban ngày, v.v ... ... Và thậm chí như vậy, Django có thể sẽ thả một cảnh báo. Nhưng vẫn ... Vâng, nó trông không đẹp! :)) – frnhr

+0

@PeterStahl có thể viết đó là câu trả lời ... – frnhr

+1

Xem https://code.djangoproject.com/ticket/19738 để xem xét của Django về việc cần làm về việc này. Cho đến nay không có giải pháp ngon miệng nào được trình bày. –

Trả lời

14

tôi đặt này trong local_settings.py tôi:

#ignore the following error when using ipython: 
#/django/db/backends/sqlite3/base.py:50: RuntimeWarning: 
#SQLite received a naive datetime (2012-11-02 11:20:15.156506) while time zone support is active. 

import warnings 
import exceptions 
warnings.filterwarnings("ignore", category=exceptions.RuntimeWarning, module='django.db.backends.sqlite3.base', lineno=53) 
+0

Chính xác điều đó! Bravo! – frnhr

+3

Tuyệt vời, nó hoạt động hoàn hảo! Chỉ cần một chút chính xác hơn về nơi để đặt mã này: Nó là đủ để đặt nó trong tập tin 'settings.py' của dự án Django của bạn. Bạn không cần tạo một tệp khác có tên 'local_settings.py' cho điều đó. – pemistahl

+1

Tôi phải sửa đổi điều này một chút thành warnings.filterwarnings ("ignore", category = exceptions.RuntimeWarning, module = 'django.db.backends.sqlite3.base', lineno = 53) – yellottyellott

-3

sửa đổi settings.py, đặt USE_TZ thành False sẽ giải quyết vấn đề này.

+1

Vâng, nhưng tôi muốn sử dụng hỗ trợ múi giờ :) – frnhr

+7

-1. Điều này không giải quyết vấn đề nhưng chỉ phá vỡ nó bằng cách tắt các thiết lập múi giờ hữu ích và quan trọng của Django. Kể từ phiên bản 1.4, bạn không nên sử dụng thời gian biểu ngây thơ. Luôn sử dụng datetimes nhận thức nếu bạn có thể. Điều này sẽ ngăn cản bạn từ rất nhiều vấn đề sau này. Ngoài ra, thông điệp cảnh báo này không ảnh hưởng đến hành vi của IPython dưới bất kỳ hình thức nào, do đó không có nghĩa là hủy kích hoạt hỗ trợ múi giờ. – pemistahl

12

Tôi có cùng một vấn đề nhưng tôi không nghĩ rằng đó thực sự là vấn đề. IPython dường như sử dụng datetimes ngây thơ trong nội bộ và Django chỉ cảnh báo về nó. Django luôn gửi cảnh báo này khi bạn bật hỗ trợ múi giờ và bất cứ khi nào nó phát hiện ra một datetime ngây thơ. Trên máy tính của tôi, cảnh báo này chỉ xuất hiện khi tôi bắt đầu hoặc đóng IPython. Cảnh báo này không ảnh hưởng đến công việc của bạn với IPython theo bất kỳ cách nào. Vì vậy, bạn có thể tạo một cách an toàn các datetimes thông thường bên trong IPython và cũng lưu chúng vào cơ sở dữ liệu của bạn. Để thoát khỏi cảnh báo đó, bạn có thể sẽ phải làm việc trên nội bộ của IPython.

Khi làm việc với thời gian biểu nhận thức nói chung, tôi khuyên bạn nên sử dụng pytz cho mục đích này.

+0

Tôi nghĩ rằng lựa chọn tốt nhất có sẵn là cái này; a.k.a. "chỉ sống với nó." –

Các vấn đề liên quan