Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django管理中的欧洲日期输入_Python_Django_Date_Django Admin - Fatal编程技术网

Python Django管理中的欧洲日期输入

Python Django管理中的欧洲日期输入,python,django,date,django-admin,Python,Django,Date,Django Admin,Django有一个DATE_格式和DATE_TIME_格式选项,允许我们在查看日期时选择使用哪种格式,但显然不允许我在Django管理员中编辑或添加日期时更改日期的输入格式 管理员的默认值为:YYYY-MM-DD 但是使用:DD-MM-YYYY会很棒 这在任何情况下都集成在i18n中吗? 如果没有自定义模型,这可以更改吗?据我所知,这看起来像是,所以是的,您现在必须做一些自定义工作。您现在必须自己做这件事,但是使用自定义表单字段类设置DateField的input\u formats参数非常容易

Django有一个DATE_格式和DATE_TIME_格式选项,允许我们在查看日期时选择使用哪种格式,但显然不允许我在Django管理员中编辑或添加日期时更改日期的输入格式

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

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

这在任何情况下都集成在i18n中吗?
如果没有自定义模型,这可以更改吗?

据我所知,这看起来像是,所以是的,您现在必须做一些自定义工作。

您现在必须自己做这件事,但是使用自定义表单字段类设置DateField的input\u formats参数非常容易。这应该做到:

class MyDateField(forms.DateField):
  def __init__(self, *args, **kwargs):
    kwargs.setdefault('input_formats', ("%d-%m-%Y",))
    super(MyDateField, self).__init__(*args, **kwargs)

请注意,input_格式是一个列表,因此您可以指定多种可能性,并在解析用户输入时按顺序进行尝试。

基于此想法,我创建了新的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)
请注意,它首先将我的格式(例如31.12.2007)添加到现有的“标准”django格式中

用法:

from mydbfields import EuDateField
class Person(models.Model):
    ...
    birthday   = EuDateField("Birthday", null=True, blank=True, help_text="")
在我的例子中,这在admin中表现得很好,但在ModelForm中也很可能表现得很好(还没有尝试过)

我的django版本是:

>>> import django
>>> django.get_version()
u'1.1 alpha 1 SVN-10105'

我修改了设置,使其禁用l10n并设置日期格式明确:

USE_L10N = False
DATE_FORMAT = 'd-m-Y'
DATETIME_FORMAT = 'd-m-Y H:i'

您还可以设置日期\输入\格式

自从Django 1.2的关闭和发布以来,现在有了一种官方的方法来实现这一点

如果已设置为
False
,则应在
设置.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')
如果将
USE\u L10N
设置为
True
,则需要使用

例如,my设置为
en-au
,我的站点名为
golf
,my
FORMAT\u MODULE\u PATH
设置为
golf.formats
,因此我的目录结构如下所示:

golf/
    settings.py
    ...
    formats/
        __init__.py
        en/
            __init__.py
            formats.py

DATE\u-INPUT\u-FORMATS
DATETIME\u-INPUT\u-FORMATS
设置是
FORMATS.py
而不是
settings.py

,注意不要将其作为字符串写入,而是作为元组写入。 例如:


如果您只想在表单中使用一种有效的日期写入方式。

我可以在我的新表单上应用此方法,但是,如何覆盖管理站点中的默认表单字段?好的,此解决方案很好,但是我如何将其与AdminDateWidget一起使用?这个小部件是我的MultiWidget的一部分。为我做了一件好事。谢谢
DATE_INPUT_FORMATS = ('%d.%m.%Y',)