关于python:如何在管理表单上的DateField中接受本地化日期格式(例如dd / mm / yy)?

How to accept localized date format (e.g dd/mm/yy) in a DateField on an admin form?

是否可以自定义django应用程序,使其在管理表单的日期字段中接受本地化的日期格式(例如dd/mm/yy)?

我有一个模型班:

1
2
class MyModel(models.Model):    
    date  = models.DateField("Date")

以及相关的管理类

1
2
class MyModelAdmin(admin.ModelAdmin):
     pass

在Django管理界面上,我希望能够以以下格式输入日期:dd/mm/yyyy。但是,管理表单中的日期字段应为YYYY-MM-DD。

我如何定制东西?注意:我已经在settings.py中指定了我的自定义语言代码(fr fr fr),但是它似乎对这个日期输入没有影响。

提前谢谢你的回答


管理系统使用默认的ModelForm来编辑对象。您需要提供一个自定义表单,以便开始重写字段行为。

在您的modelform中,使用DateField覆盖该字段,并使用input_formats选项。

1
2
3
4
5
6
7
8
9
MY_DATE_FORMATS = ['%d/%m/%Y',]

class MyModelForm(forms.ModelForm):
    date = forms.DateField(input_formats=MY_DATE_FORMATS)
    class Meta:
        model = MyModel

class MyModelAdmin(admin.ModelAdmin):
    form = MyModelForm


本提出的修复方案正在运行,但右侧的日历不再显示。

这是一个改进。日历仍将显示,日期将以%d%%m/%y格式显示。

1
2
3
4
5
6
7
8
9
10
11
from django.forms.models import ModelForm
from django.contrib.admin.widgets import AdminDateWidget
from django.forms.fields import DateField  

class MyModelForm(ModelForm):
    date = DateField(input_formats=['%d/%m/%Y',],widget=AdminDateWidget(format='%d/%m/%Y'))
    class Meta:
        model = MyModel

class MyModelAdmin(admin.ModelAdmin):
    form = MyModelForm

单击日历中的某一天时,该字段的值的格式为%y-%m-%d,但被接受为有效的日期格式。

附:感谢丹尼尔·罗斯曼对这个问题的回答。