2011-02-02 8 views
16

क्या कोई तरीका है कि मैं dgango को अपने डेटा को postgresql में 'dd-mm-yyyy' (यदि आवश्यक हो) के रूप में संग्रहीत करने के लिए प्राप्त कर सकता हूं और django फॉर्म 'dd-mm' के लिए मान्य है -yyyy '?django दिनांक प्रारूप 'dd-mm-yyyy'

(मैं की तरह बिना ज्यादा सफलता चीजों की कोशिश की है:

DATE_INPUT_FORMATS = ('%d-%m-%Y') 
USE_I18N = True 
USE_L10N = True 

और googling के एक बहुत है, लेकिन कोई सफलता :(

उत्तर

27

समस्या पता चला कि मैं settings.py फ़ाइल में दोनों आईएसओ और ब्रिटेन तिथि प्रारूप की जरूरत होने के लिए इसलिए जैसे:

DATE_INPUT_FORMATS = ('%d-%m-%Y','%Y-%m-%d') 

और फिर forms.py निम्नलिखित करने के लिए समायोजित:

class ClientDetailsForm(ModelForm): 
    date_of_birth = DateField(input_formats=settings.DATE_INPUT_FORMATS) 
    class Meta: 
     model = ClientDetails 

क्यों USE_L10N = True ऐसा नहीं कर सकता मैं यह नहीं जानता!

[this के लिए धन्यवाद और this]

+1

आपके पास यूएस प्रारूप नहीं है जैसा आपने कहा था, आपको यूके और आईएसओ प्रारूप मिल गए हैं। – dalore

+0

आप सही हैं। मैंने इसे – Sevenearths

-2

आप एक CharField इस्तेमाल कर सकते हैं अगर आप स्टोर करने के लिए चाहता था किया यह वास्तव में इस प्रारूप में है, अन्यथा यह अजगर datetime प्रारूप का उपयोग करेगा।

आप एक CharField का उपयोग करते हैं, तो आप कस्टम वी के साथ एक रूप में लिख सकते हैं इस क्षेत्र के लिए अलगाव।

+1

यदि आप केवल टेम्पलेट के माध्यम से पृष्ठ पर प्रारूप प्रदर्शित करना चाहते हैं तो आप Django "time" टेम्पलेट-फ़िल्टर का उपयोग कर सकते हैं: http://docs.djangoproject.com/en/1.2/ref/templates/builtins/#date – Hixi

0

मैं डेटटाइमफ़ील्ड को अपने तर्क को ओवरराइट कर दूंगा। इससे कोई फर्क नहीं पड़ता कि postgresql इसे कैसे संग्रहीत कर रहा है, आप इसे कभी भी प्रारूपित कर सकते हैं।

डॉक्स: http://docs.djangoproject.com/en/dev/ref/models/instances/

+0

तो django मेरे लिए ऐसा नहीं करेगा? मुझे इसे खुद करना है? – Sevenearths

+0

इस मदद कर सकता है: http://docs.djangoproject.com/en/1.1/ref/forms/fields/#datefield रखने के लिए यह आसान – programmersbook

18

DATE_INPUT_FORMATS settings.py में USE_I18N = True साथ कोई प्रभाव नहीं है। ऐसा इसलिए है क्योंकि django सक्रिय लोकेल के लिए विशिष्ट प्रारूप लोड करेगा। Django कई अलग-अलग स्थानों के लिए प्रारूप परिभाषाओं के साथ जहाजों।

आप ओवरराइड कर सकते हैं Django डिफ़ॉल्ट प्रारूप परिभाषाएँ:

mysite/ 
    formats/ 
     __init__.py 
     en/ 
      __init__.py 
      formats.py 

Django दस्तावेज़ में वर्णित के रूप में: Creating custom formats file

+0

करता 'USE_L10N = TRUE'' DATE_INPUT_FORMATS' – Sevenearths

+1

पर कोई असर तो 'USE_L10N = गलत 'तो django आपकी सेटिंग्स से किसी भी प्रारूप का उपयोग नहीं करेगा। 'USE_L10N = True' आपको अपनी सेटिंग्स.py में स्वरूप सेट करने में सक्षम बनाता है। और 'USE_I18N = True' आगे भी जाता है और लोकेल विशिष्ट प्रारूपों को सक्षम बनाता है। – Ski

8

Sevenearths answer में टिप्पणी क्यों USE_L10N = True सिर्फ ऐसा नहीं कर सकते

मैं नहीं जानता है!

प्रलेखन का कहना है कि USE_L10N = True डिफ़ॉल्ट सेटिंग है, लेकिन ब्रिटेन LANGUAGE_CODE भी en-GB को en-us की अपनी डिफ़ॉल्ट सेटिंग से परिवर्तित किया जाना चाहिए काम करने के लिए तारीखें मिलता है।

एक बार बदल गया, दिनांक फ़ील्ड स्वचालित रूप से प्रारूपों को "dd/mm/yyyy" और "yyyy-mm-dd" (और संभवतः अन्य, मैंने उन सभी का परीक्षण नहीं किया है) को input_formats = settings.DATE_INPUT_FORMATS को प्रत्येक फ़ॉर्म तिथि में सेट करने की आवश्यकता के बिना स्वीकार करते हैं खेत।

2

यह सटीक प्रश्न का उत्तर नहीं हो सकता है, लेकिन जब से मैं यहां आया ...मैं एक डेट विजेट का उपयोग करने का सुझाव दूंगा, और Django को तारीख को जिस तरह से समझता है उसे सहेजने दें। इसलिए की तरह अपने रूप में क्षेत्र को परिभाषित करें:

import datetime 
from django import forms 

def last_years(): 
    first_year = datetime.datetime.now().year - 6 
    return list(range(first_year + 7, first_year, -1)) 

class MyForm(forms.Form): 
    # This is it... it's user friendly, and can't go wrong parsing it 
    date = forms.DateField(widget=forms.SelectDateWidget(years = last_years())) 

आप Django मॉडल की एक दिनांक फ़ील्ड में यह मिल गया है, तो समस्या सिर्फ छोड़ दिया उत्पादन प्रतिनिधित्व स्वरूपित किया जाएगा। क्या मैं सही हू?

+0

को सही किया है क्योंकि मैंने इस प्रश्न से पूछा है। मुझे लगता है कि आपका जवाब 1.10+ – Sevenearths

+0

के लिए बिल्कुल सही होगा: डी वास्तव में ... मैंने बस इस सवाल पर टक्कर लगी और सोचा कि मैं कुछ अद्यतन सुझाव फेंक दूंगा (6 साल बाद) – coya

संबंधित मुद्दे