/ / Django, डीआरएफ और PostgreSQL उचित सेटिंग्स में टाइमज़ोन - django, timezone, django-rest-framework

Django, डीआरएफ और PostgreSQL उचित सेटिंग्स में टाइमज़ोन - django, timezone, django-rest-framework

मैंने Django 1.8 में टाइमज़ोन कॉन्फ़िगर किया है (मेरा वर्तमान टाइमज़ोन यूटीसी + 1 या बीएसटी है):

TIME_ZONE = "Europe/London"
USE_I18N = True
USE_L10N = True
USE_TZ = True

मेरे मॉडल में टाइमस्टैंप विशेषता है:

class NodeGPS(models.Model):
node_id = models.ForeignKey(Node)
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
gps_latitude = models.FloatField(null=True, blank=True)
gps_longitude = models.FloatField(null=True, blank=True)

मेरे पास Django Rest Framework 3.4 है।0, इसलिए जब मैं डीआरएफ वेब इंटरफ़ेस टाइमस्टैम्प के माध्यम से डेटा पोस्ट करता हूं तो स्वचालित रूप से यूटीसी पर सेट होता है, जो मेरे वर्तमान समय (यूटीसी + 1) से 1 घंटा पहले होता है। हालांकि, PostgreSQL टाइमस्टैम्प फ़ील्ड में यूटीसी + 1 के रूप में सेट किया गया है। लेकिन डीआरएफ वेब इंटरफ़ेस पर यह हमेशा यूटीसी में समय दिखाता है।

क्या अजीब व्यवहार है। इसके लिए एक कारण क्या है?

किसी सुझाव के लिए अग्रिम धन्यवाद!

उत्तर:

जवाब के लिए 2 № 1

जबकि समय स्थानीय टाइमज़ोन में परिवर्तित हो जाते हैंटेम्पलेट्स और रूपों में, वे धारावाहिकों के लिए परिवर्तित नहीं होते हैं (और इस प्रकार ऑब्जेक्ट सृजन को छोड़कर आमतौर पर यूटीसी होते हैं, जब वे क्लाइंट अपलोड किए जाते हैं)। धारणा यह है कि एपीआई का उपयोग करने वाले किसी भी व्यक्ति को टाइमज़ोन को संभालने के अपने तरीके से क्लाइंट के माध्यम से इसका उपयोग किया जाएगा।

समाधान एक कस्टम डेटाटाइम फ़ील्ड बनाना है जो सही टाइमज़ोन में परिवर्तित हो जाता है। यहाँ देखें: DjangoRestFramework ModelSerializer DateTimeField केवल ऑब्जेक्ट सृजन पर वर्तमान टाइमज़ोन में कनवर्ट करना

इसके अलावा: PostgreSQL टाइमस्टैम्प फ़ील्ड से सावधान रहें। यह केवल यह संकेत दे रहा है कि समय को उस समय क्षेत्र में परिवर्तित कर दिया गया है जब सर्वर सोचता है कि यह है (दस्तावेज़ों से):

सभी टाइमज़ोन-जागरूक तिथियां और समय यूटीसी में आंतरिक रूप से संग्रहीत होते हैं। वे क्लाइंट को प्रदर्शित होने से पहले टाइमज़ोन कॉन्फ़िगरेशन पैरामीटर द्वारा निर्दिष्ट जोन में स्थानीय समय में परिवर्तित हो जाते हैं।