webentwicklung-frage-antwort-db.com.de

django-Datumsformat 'TT-MM-JJJJ'

Wie kann ich Django dazu bringen, meine Daten in Postgresql als 'dd-mm-yyyy' (falls erforderlich) zu speichern und die Django-Formulare für 'dd-mm-yyyy' zu bestätigen?

(Ich habe ohne viel Erfolg Dinge versucht wie:

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

Und viel googeln, aber keinen Erfolg :(

17
Sevenearths

Das Problem stellte sich heraus, dass ich sowohl das ISO- als auch das UK-Datumsformat in der settings.py-Datei benötigte.

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

und dann die forms.py an das Folgende angepasst:

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

Warum USE_L10N = True das nicht einfach kann, weiß ich nicht!

[Danke an diese und diese ]

32
Sevenearths

DATE_INPUT_FORMATS in settings.py hat keine Auswirkung auf USE_I18N = True. Dies liegt daran, dass Django ein bestimmtes Format für das aktive Gebietsschema lädt. Django wird mit Formatdefinitionen für viele verschiedene Sprachumgebungen geliefert.

Sie können Django-Standardformatdefinitionen überschreiben:

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

Wie in der Django-Dokumentation beschrieben: Datei mit benutzerdefinierten Formaten erstellen

18
Ski

In Sevenearths answer Dort ist der Kommentar 

Warum USE_L10N = True das nicht einfach kann, weiß ich nicht!

In der Dokumentation heißt es, dass USE_L10N = True die Standardeinstellung ist. Damit jedoch UK-Daten funktionieren können, muss LANGUAGE_CODE von der Standardeinstellung von en-us in en-GB geändert werden.

Nach der Änderung akzeptieren Datumsfelder automatisch die Formate "TT/MM/JJJJ" und "JJJJ-MM-TT" (und möglicherweise andere, ich habe sie nicht alle getestet), ohne dass in jedem Formatumfeld input_formats = settings.DATE_INPUT_FORMATS festgelegt werden muss.

10
Tony

Dies ist möglicherweise nicht die Antwort auf die genaue Frage, aber seit ich hier bin ... würde ich vorschlagen, ein Datums-Widget zu verwenden, und Django das Datum so speichern, wie es es versteht. Definieren Sie das Feld in Ihrem Formular wie folgt:

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()))

Wenn Sie es in einem Datumsfeld des Django-Modells finden, besteht das einzige Problem darin, die Ausgabedarstellung zu formatieren. Habe ich recht?

2
coya

Ich würde das DateTimeField überschreiben, meine Logik setzen. Es spielt keine Rolle, wie Postgresql es speichert, Sie können es nach Belieben formatieren.

Dokumente: http://docs.djangoproject.com/de/dev/ref/models/instances/

0
programmersbook