Как заставить Django ModelForm принять дату в определенном формате (или преобразовать в приемлемый формат)? - PullRequest
0 голосов
/ 18 июня 2020

У меня есть модель с полем даты. Я использую эту модель для создания формы с использованием класса 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()

1 Ответ

0 голосов
/ 18 июня 2020

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

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

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")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...