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

发布于 2024-08-24 20:27:56 字数 445 浏览 8 评论 0原文

是否可以自定义 django 应用程序以在管理表单的 DateField 中接受本地化日期格式(例如 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),但它似乎对此日期输入问题没有影响。

预先感谢您的回答

Is it possible to customize a django application to have accept localized date format (e.g dd/mm/yy) in a DateField on an admin form ?

I have a model class :

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

And associated admin class

class MyModelAdmin(admin.ModelAdmin):
     pass

On django administration interface, I would like to be able to input a date in following format : dd/mm/yyyy. However, the date field in the admin form expects yyyy-mm-dd.

How can I customize things ? Nota bene : I have already specified my custom language code (fr-FR) in settings.py, but it seems to have no effect on this date input matter.

Thanks in advance for your answer

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

吃颗糖壮壮胆 2024-08-31 20:27:56

管理系统使用默认的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

The admin system uses a default ModelForm for editing the objects. You'll need to provide a custom form so that you can begin overriding field behaviour.

Inside your modelform, override the field using a DateField, and use the input_formats option.

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
梦幻的味道 2024-08-31 20:27:56

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 格式,但被接受为有效日期格式。

PS:感谢 Daniel Roseman 对这个问题的回答

The fix proposed by Ben is working but the calendar on the right is not shown anymore.

Here is an improvement. The calendar will still be shown and the date will be displayed with the %d%%M/%Y format.

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

When clicking on a day in the calendar, the value of the field has the %Y-%m-%d format but is is accepted as a valid date format.

PS: Thanks to Daniel Roseman for his answer to this question

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文