У меня есть модель с полем даты. Я использую эту модель для создания формы с использованием класса ModelForm.

Проблема в том, что пользователь может вводить дату в нескольких форматах (д-м-гг, дд-мм-гг, дд-мм-гггг) (пока не думает о локали). После отправки формы. Django form.is_valid () не работает из-за формата даты.

Мне нужно обрабатывать разные форматы, но я не могу понять, как это сделать. Вот минимальный класс формы и модели: (предположим, что импорт правильный)

class MyForm(forms.ModelForm):
    class Meta:
        model = models.MyDateModel
        fields = ["date"]

        widgets = {

            "date":   forms.DateInput(),
        }

Модель Класс

class MyDateModel(models.Model): 
    date = models.DateField()
0
NumbMonkE 18 Июн 2020 в 10:51

1 ответ

Лучший ответ

Самый простой способ - здесь.

Или вы можете добавить функцию clean_date в свой класс формы, проверить ввод даты с помощью регулярного выражения и преобразовать ее в формат даты и времени Django. Что-то вроде этого:

import datetime, re


class MyForm(forms.ModelForm):
    ...

    def clean_date(date):
        date = self.cleaned_data.get('date')
        if re.match('^\d{1,2}-\d{1,2}-\d{2}', date) is not None:
            return datetime.datetime.strptime(date, "%d-%m-%y").strftime("%Y-%m-%d")
        if re.match('^\d{2}-\d{2}-\d{4}', date) is not None:
            return datetime.datetime.strptime(date, "%d-%m-%Y").strftime("%Y-%m-%d")

0
Crosby 18 Июн 2020 в 08:27