如何在管理员表单的日期字段中接受本地化日期格式(如 dd/mm/yy)?
有没有办法定制一个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