如何在管理员表单的日期字段中接受本地化日期格式(如 dd/mm/yy)?

4 投票
2 回答
3889 浏览
提问于 2025-04-15 20:23

有没有办法定制一个Django应用,让它在管理表单中的日期字段接受本地化的日期格式(比如 dd/mm/yy)?

我有一个模型类:

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

还有一个相关的管理类:

class MyModelAdmin(admin.ModelAdmin):
     pass

在Django的管理界面上,我希望能以以下格式输入日期:dd/mm/yyyy。然而,管理表单中的日期字段却要求输入格式为yyyy-mm-dd。

我该如何进行定制呢?需要注意的是,我已经在settings.py中指定了我的自定义语言代码(fr-FR),但这似乎对日期输入没有影响。

提前感谢你的回答。

2 个回答

2

Ben 提出的解决方案是有效的,但右边的日历不再显示了。

这里有个改进方案。日历依然会显示,日期会以 %d%%M/%Y 的格式展示。

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 的格式显示,但这个格式是被接受为有效的日期格式的。

顺便说一下,感谢 Daniel Roseman 对 这个问题 的回答。

5

管理系统使用一个默认的 ModelForm 来编辑对象。你需要提供一个自定义的表单,这样才能开始修改字段的行为。

在你的 modelform 里面,使用 DateField 来重写字段,并且使用 input_formats 选项。

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

撰写回答