Models.DateField格式问题

时间:2014-12-17 16:36:48

标签: django django-models django-1.7

我有一个模型,它有一个日期字段

date_of_birth = models.DateField(blank=True, null=True, verbose_name="DOB")

我想将其格式化为以dd/MM/yyyy格式保存日期,但我尝试的所有内容都失败了。

我认为默认值必须是YYYY-MM-dd,因为这是它保存到我的数据库的方式。尝试以不同的格式提交日期会出现错误:

[u"'17/01/1970' value has an invalid date format. It must be in YYYY-MM-DD format."]

我尝试过使用Date Widgets,但遇到一些问题,让它与我的models.py

兼容

3 个答案:

答案 0 :(得分:5)

您可以通过覆盖表单中input_formats上的DateField来更改此设置。这包括pretty well in the documentation。默认日期格式为

['%Y-%m-%d',      # '2006-10-25'
'%m/%d/%Y',       # '10/25/2006'
'%m/%d/%y']       # '10/25/06'

['%Y-%m-%d',      # '2006-10-25'
'%m/%d/%Y',       # '10/25/2006'
'%m/%d/%y',       # '10/25/06'
'%b %d %Y',      # 'Oct 25 2006'
'%b %d, %Y',      # 'Oct 25, 2006'
'%d %b %Y',       # '25 Oct 2006'
'%d %b, %Y',      # '25 Oct, 2006'
'%B %d %Y',       # 'October 25 2006'
'%B %d, %Y',      # 'October 25, 2006'
'%d %B %Y',       # '25 October 2006'
'%d %B, %Y']      # '25 October, 2006'

取决于您是否在设置中使用本地化。

您似乎在寻找%d/%m/%y,这不是默认格式。

答案 1 :(得分:1)

一个选项是扩展DateField以处理其他日期格式,例如在保存期间自己转换它们,说明here。作为参考,我只需处理这个问题,我的解决方案看起来像这样:

class HWDateField(models.DateField):
def to_python(self, value):
    if value is None:
        return value
    return super(HWDateField,self).to_python(parseDate(value))

parseDate是我已经写过的转换函数。

答案 2 :(得分:0)

您不能在模型的字段上设置input_formats,而只能在表单的字段上设置。使用ModelForm,并根据模型自动生成字段,您可以将documented here重新定义/自定义。

“ [[...]您想完全控制一个字段,可以像声明常规表格一样通过声明性地指定字段来做到这一点。”这是我的示例:

class UserCreationForm(BaseUserCreationForm):
    birth_date = forms.DateField(input_formats=['%d/%m/%Y'])

    class Meta(BaseUserCreationForm.Meta):
        model = User
        fields = ("username", "first_name", "last_name", "email", "birth_date")