Django поле даты по умолчанию сохраняет формат перезаписи - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть таблица postgresql9.6 с полем char: 'start_date' и форматом вроде '20200101'.
И я создал модель Django2.0:

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

My 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']

Таким образом, я получаю дату в веб-форме: «20200101», но когда я сохраняю форму , показывает ошибку:
'значение имеет неверный формат даты. Это должно быть "" в формате ГГГГ-ММ-ДД. '
Я знаю, что DateField сохраняет дату по умолчанию, использует формат' ГГГГ-ММ-ДД ', но мне нужно изменить его на' ГГГГММДД ', чтобы я мог сохранить согласованные данные в базу данных pg.
Итак, как перезаписать функцию DateField или Model, чтобы изменить формат по умолчанию?

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

Вы можете использовать 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',)
0 голосов
/ 05 апреля 2020

Благодаря @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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...