Django Не позволяя сэкономить Время в час: минутный формат - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь сэкономить время в этом формате '13: 21 '. но django не позволяет мне сделать это и дает исключение

["'13 : 53' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] format."]

мое поле равно

duration = models.TimeField(null=True , blank=True)

мое setting.py равно

TIME_INPUT_FORMATS = ('%H:%M',)

Ответы [ 2 ]

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

лучше изменить ваш внешний интерфейс и отправлять данные в правильном формате, чем изменять внутренний, но если вы хотите обрабатывать это на стороне внутреннего сервера, вы можете переопределить метод сохранения модели и очистить duration пробелы:

    def save(self, *args, **kwargs):
        if isinstance(self.duration, str):
            self.duration = self.duration.replace(' ', '')
        super().save(*args, **kwargs)

это будет работать до тех пор, пока вы передаете duration со строковым значением, в других случаях вы можете использовать datetime.datetime.strptime(), например:

import datetime
time_string = '13 : 53'
time = datetime.datetime.strptime(time_string, '%H : %M').time()

, также это может произойти где угодно (даже в вашем API) до передача данных в модель тоже.

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

Чтобы все заработало, просто добавьте этот формат в форматы.

TIME_INPUT_FORMATS = ('%H : %M', '%H:%M')

Как видите, пробелы также учитываются как символы, например, вы хотите форматировать время только с пробелами - это возможно просто Бо делает это

TIME_INPUT_FORMATS = ('%H %M',)
...