Python Django日期字段默认保存格式覆盖
我有一个postgresql9.6表,它有一个char字段:“start_date”,格式类似于“20200101”。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
我创建了一个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吗?