Tortoise ORM - модель Pydantic с полем времени Postgresql

avatar
Ara
8 августа 2021 в 18:12
254
0
1

Я пытаюсь создать модель 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)»

Источник
Adrian Klaver
8 августа 2021 в 18:51
0

Вам нужно добавить к вашему вопросу ту часть кода, где вы создаете/присваиваете значение аргументу $5. Скорее всего, вы предполагаете, что работаете с объектом datetime.time, тогда как на самом деле вы работаете с объектом str.

Adrian Klaver
9 августа 2021 в 15:20
0

Если поле Postgres по-прежнему имеет тип time, ваши изменения в типе модели и входных значениях не будут работать. "1900-01-01 17:00:01" не является допустимым форматом времени.

Ответы (0)