Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django日期字段默认保存格式覆盖_Python_Django - Fatal编程技术网

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

Python Django日期字段默认保存格式覆盖,python,django,Python,Django,我有一个postgresql9.6表,它有一个char字段:“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.s

我有一个postgresql9.6表,它有一个char字段:“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函数来更改默认格式呢?

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

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',)

多亏了@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)

您可以在模型上设置一个
CharField
,并验证它看起来像一个日期吗?我尝试了,但我需要使用管理站点datepicker小部件,因此我将该字段更改为DateField。是否要在DB中使用此格式YYYY-MM-DD保存并从DB YYYYMMDD获取?这可能会有帮助:我想用yyyymmd将数据保存在数据库中。在设置文件中,您应该定义“DATETIME\u格式=%Y%m%d”,并在模型中使用DATETIME字段。谢谢,但我不想使用文本输入类型,我想使用datepicker小部件,因此DateInput可以更改其输入类型以使用datepicker吗?