python Django日期格式'dd-mm-yyyy'

7dl7o3gd  于 2023-06-04  发布在  Python
关注(0)|答案(8)|浏览(154)

有没有什么方法可以让django在postgresql中将我的数据存储为'dd-mm-yyyy'(如果需要的话),并让django表单验证为'dd-mm-yyyy'?

  • (我尝试过没有太多成功的事情,如:*
DATE_INPUT_FORMATS = ('%d-%m-%Y')
USE_I18N = True
USE_L10N = True
  • 做了很多谷歌搜索,但没有成功:(*
vsmadaxz

vsmadaxz1#

问题是我需要在settings.py文件中同时使用ISO和UK日期格式,如下所示:

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不能这样做,我不知道!

fbcarpbf

fbcarpbf2#

www.example.com中的DATE_INPUT_FORMATSsettings.py对USE_I18N = True无效。这是因为django会为活动区域加载特定的格式。Django为许多不同的语言环境提供了格式定义。
你可以覆盖django的默认格式定义:

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

如django文档所述:创建自定义格式文件

bjg7j2ky

bjg7j2ky3#

Sevenearths answer中有注解
为什么USE_L10N = True不能这样做,我不知道!
文档中说USE_L10N = True是默认设置,但要让英国日期工作,LANGUAGE_CODE也必须从默认设置en-us更改为en-GB
一旦更改,日期字段自动接受格式“dd/mm/yyyy”和“yyyy-mm-dd”(可能还有其他格式,我没有测试过所有格式),而不需要在每个表单日期字段中设置input_formats = settings.DATE_INPUT_FORMATS

wf82jlnq

wf82jlnq4#

我使用下面的代码,工作在添加和编辑窗体的情况下.

在settings.py

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

在forms.py

class MyModelForm(forms.ModelForm):
    issue_date = forms.DateField(widget=forms.DateInput(format = '%d/%m/%Y'), input_formats=settings.DATE_INPUT_FORMATS)
nwo49xxi

nwo49xxi5#

这可能不是问题的答案,但自从我来了这里...我建议使用一个日期小部件,让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模型的日期字段中,那么剩下的唯一问题就是格式化输出表示。我说的对吗

ljsrvy3e

ljsrvy3e6#

这对我很有效

date_of_birth = forms.DateField(
    localize=True,
    widget=forms.DateInput(format = '%Y-%m-%d',attrs={'type': 'date'}),
)
ymdaylpp

ymdaylpp7#

我会覆盖DateTimeField把我的逻辑。不管postgresql是如何存储的,你都可以随心所欲地格式化它。
文档:http://docs.djangoproject.com/en/dev/ref/models/instances/

ma8fv8wu

ma8fv8wu8#

您需要如下所示设置USE_L10N False,以使DATE_INPUT_FORMATS能够更改DateTimeField()和DateField()的日期格式。* USE_L10NDATE_INPUT_FORMATS之前,因此需要设置USE_L10NFalse

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

文档在DATE_INPUT_FORMATS中如下所示:
USE_L10NTrue时,区域设置指定的格式具有更高的优先级,并将被应用。

相关问题