Django日期字段默认保存格式覆盖

2024-09-25 00:32:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个postgresql9.6表,它有一个字符字段:“start_date”,格式类似于“20200101”。
我创建了一个Django2.0模型:

class TestModel(models.Model):
    start_date = models.DateField('start_date')

我的admin.py是:

class TestAdmin(admin.ModelAdmin):
    list_display = ('start_date',)

admin.site.register(TestModel, TestAdmin)

我还修改了settings.py:

USE_L10N = False

DATE_INPUT_FORMATS = ['%Y%m%d']
DATE_FORMATS = ['%Y%m%d']

因此,我在web表单中获取日期:'20200101',但当我保存表单时,显示一个错误:
'值的日期格式无效。它一定是“ “以YYYY-MM-DD格式。”
我知道日期字段使用“YYYY-MM-DD”格式保存默认日期,但我需要将其更改为“yyyyymmdd”,以便将一致的数据保存到pg数据库中。
那么,如何覆盖DateField或Model函数来更改默认格式呢


Tags: py表单datemodeladminmodels格式start
2条回答

多亏了@Iain Shelvington,我终于找到了解决问题的办法。这是我的密码:

class TestModel(models.Model):
    start_date = models.CharField(max_length=8)

class TestModelForm(forms.ModelForm):
    class Meta:
        model = TestModel
        fields = ['start_date']
        widgets = {'start_date': forms.DateInput(format='%Y%m%d', attrs={'class': 'form-control', 'type': 'date'})}

class TestAdmin(admin.ModelAdmin):
    form = TestModelForm
    list_display = ('start_date',)

通常,我修改了admin.py的save_模型,将带有YYYYMMDD的日期保存到pg9.6:

 def save_model(self, request, obj, form, change):

        import re
        obj.start_date = str(re.sub('-', '', obj.start_date))
        obj.stop_date = str(re.sub('-', '', obj.stop_date))
        super().save_model(request, obj, form, change)

您可以在模型表单中为模型使用CharFieldDateInput小部件

class TestModel(models.Model):
    start_date = models.CharField(max_length=8)

class TestModelForm(forms.ModelForm):
    class Meta:
        model = TestModel
        fields = ['start_date']
        widgets = {'start_date': forms.DateInput(format='%Y%m%d')}

class TestAdmin(admin.ModelAdmin):
    form = TestModelForm
    list_display = ('start_date',)

相关问题 更多 >