Я пытаюсь создать модель Pydantic с Tortoise ORM с Postgresql в качестве серверной части. У меня есть столбцы start_time
и end_time
, определенные в Postgres как тип данных Time. Я попробовал свой класс, как показано ниже:
class Carb_Ratio(models.Model):
id = fields.UUIDField(pk=True, auto_generated=True)
client_id = fields.UUIDField()
ratio_type = fields.CharEnumField(RatioType)
carb_ratio = fields.DecimalField(max_digits=10, decimal_places=2)
start_time = fields.CharField(max_length=8)
end_time = fields.CharField(max_length=8)
insulin_sensitivity = fields.DecimalField(max_digits=10, decimal_places=2)
created_at = fields.DatetimeField(auto_now_add=True)
Когда я пытаюсь создать запись, я получаю сообщение об ошибке "tortoise.exceptions.OperationalError: неверный ввод для аргумента запроса $5: '' (объект 'str' не имеет атрибута 'hour')"
Поля Tortoise не имеют поля TimeField, я пробовал даже с полями. DatetimeField дает мне недопустимый формат даты и времени для "08:00:00"
Любые указатели в правильном направлении будут полезны. Заранее спасибо
Обновление: @ Адриан Клавер, спасибо за ваше предложение. Я изменил эти поля на DatetimeField
. start_time = fields.DatetimeField()
end_time = fields.DatetimeField()
мои входные значения должны быть изменены с
{
"client_id": "9181233d-0fa3-4844-bb28-ba1660be1415",
"ratio_type": "time_range",
"carb_ratio": 16,
"start_time": "17:00:01",
"end_time": "21:00:00",
"insulin_sensitivity": 6
}
до
{
"client_id": "9181233d-0fa3-4844-bb28-ba1660be1415",
"ratio_type": "time_range",
"carb_ratio": 16,
"start_time": "1900-01-01 17:00:01",
"end_time": "1900-01-01 21:00:00",
"insulin_sensitivity": 6
}
и теперь он может корректно вставлять значения. Однако функция выбора теперь выдает ошибку «iso8601.iso8601.ParseError: Ожидается строка datetime.time(10, 0)»
Вам нужно добавить к вашему вопросу ту часть кода, где вы создаете/присваиваете значение аргументу
$5
. Скорее всего, вы предполагаете, что работаете с объектомdatetime.time
, тогда как на самом деле вы работаете с объектомstr
.Если поле Postgres по-прежнему имеет тип
time
, ваши изменения в типе модели и входных значениях не будут работать."1900-01-01 17:00:01"
не является допустимым форматом времени.