簡體   English   中英

Django 日期字段默認保存格式覆蓋

[英]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 使用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',)

感謝@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM