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

后端 未结 2 1912
深忆病人
深忆病人 2021-01-06 04:22

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 :

相关标签:
2条回答
  • 2021-01-06 04:49

    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
    
    0 讨论(0)
  • 2021-01-06 05:03

    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

    0 讨论(0)
提交回复
热议问题