[英]Django datefield default save format overwriting
我有一個 postgresql9.6 表,它有一個 char 字段:'start_date',格式類似於'20200101'。
我創建了一個 Django2.0 model:
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 格式的“”。
我知道 DateField 保存日期默認使用 'YYYY-MM-DD' 格式,但我需要將其更改為 'YYYYMMDD' 以便我可以將一致的數據保存到 pg 數據庫中。
那么如何覆蓋 DateField 或者 Model function 來改變默認格式呢?
您可以在 model 表單中為 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_model 以將帶有 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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.