Django Admin中的欧洲日期输入

And*_*dor 7 python django date django-admin

Django的有DATE_FORMAT和DATE_TIME_FORMAT选项,允许我们选择观看日期时使用的格式,但显然并未让编辑或Django管理增加时我改变输入格式的日期.

管理员的默认值为:YYYY-MM-DD

但是使用会很棒:DD-MM-YYYY

在i18n中是否集成了这个?没有自定义模型可以更改吗?

Cas*_*par 9

自从Django票6483关闭以及Django 1.2发布以来,现在有一种官方方式可以做到这一点.

如果你已经USE_L10N设置False,你应该做的是指定DATE_INPUT_FORMATSDATETIME_INPUT_FORMATS你的settings.py.以下是我使用的设置,基于转换默认值:

#dd/mm/yyyy and dd/mm/yy date & datetime input field settings
DATE_INPUT_FORMATS = ('%d-%m-%Y', '%d/%m/%Y', '%d/%m/%y', '%d %b %Y',
                      '%d %b, %Y', '%d %b %Y', '%d %b, %Y', '%d %B, %Y',
                      '%d %B %Y')
DATETIME_INPUT_FORMATS = ('%d/%m/%Y %H:%M:%S', '%d/%m/%Y %H:%M', '%d/%m/%Y',
                          '%d/%m/%y %H:%M:%S', '%d/%m/%y %H:%M', '%d/%m/%y',
                          '%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M', '%Y-%m-%d')
Run Code Online (Sandbox Code Playgroud)

如果你已经USE_L10N设置为True,那么你将需要使用它FORMAT_MODULE_PATH.

例如,我LANGUAGE_CODE设置为en-au,我的网站被调用golf,我FORMAT_MODULE_PATH的设置为golf.formats,所以我的目录结构如下所示:

golf/
    settings.py
    ...
    formats/
        __init__.py
        en/
            __init__.py
            formats.py
Run Code Online (Sandbox Code Playgroud)

DATE_INPUT_FORMATSDATETIME_INPUT_FORMATS设置在formats.py代替settings.py.


ale*_*nia 5

我修改了设置,以便它禁用 l10n 并明确设置日期格式:

USE_L10N = False
DATE_FORMAT = 'd-m-Y'
DATETIME_FORMAT = 'd-m-Y H:i'
Run Code Online (Sandbox Code Playgroud)

您也可以设置 DATE_INPUT_FORMATS。


小智 2

基于这个想法我创建了新的 db.fields 类 EuDateField:

mydbfields.py

from django import forms
from django.forms.fields import DEFAULT_DATE_INPUT_FORMATS
from django.db import models

class EuDateFormField(forms.DateField):
    def __init__(self, *args, **kwargs):
        kwargs.update({'input_formats': ("%d.%m.%Y",)+DEFAULT_DATE_INPUT_FORMATS})
        super(EuDateFormField, self).__init__(*args, **kwargs)

class EuDateField(models.DateField):
    def formfield(self, **kwargs):
        kwargs.update({'form_class': EuDateFormField})
        return super(EuDateField, self).formfield(**kwargs)
Run Code Online (Sandbox Code Playgroud)

请注意,它首先将我的格式(例如 31.12.2007)添加到现有的“标准”django 格式中。

用法:

from mydbfields import EuDateField
class Person(models.Model):
    ...
    birthday   = EuDateField("Birthday", null=True, blank=True, help_text="")
Run Code Online (Sandbox Code Playgroud)

就我而言,这在管理中表现良好,但很可能在 ModelForm 中也会表现良好(还没有尝试过)。

我的 Django 版本是:

>>> import django
>>> django.get_version()
u'1.1 alpha 1 SVN-10105'
Run Code Online (Sandbox Code Playgroud)