Я хотел бы создать настраиваемое поле, которое получает строку даты и времени и хранит данные в двух столбцах базы данных. Я читаю django doc, но не понимаю, как это сделать с более чем одним столбцом db.
Это устаревшая БД, поэтому я не могу изменить расположение таблиц БД.
У меня сейчас есть эта модель.
class MyModel(models.Model):
mixing_datetime = models.DateTimeField()
mixing_datetime_utc_offset_seconds = models.IntegerField()
Я хотел бы создать поле, которое позволяет внешнему интерфейсу (это API с DRF) просто отправлять строку даты и времени (вместо даты и времени и смещения отдельно), а серверу выполнять работу за кулисами. Таким образом, идея будет такой:
class MyModel(models.Model):
mixing_datetime = models.DateTimeField()
mixing_datetime_utc_offset_seconds = models.IntegerField()
datetime = MyCustomDatetimeField() # This also should not be sent to db
Итак, чтобы уточнить, идея заключается в том, чтобы интерфейс пользователя выполнял этот запрос:
frontend_client.post('server_url', payload={'datetime': '2021-07-02T14:34:49+00:00'}
А затем серверная часть выполнит некоторые расчеты и установит параметры Mixing_datetime и Mixing_datetime_utc_offset_seconds
Как этого достичь?
Что именно бэкэнд делает за кулисами? Вы хотите обработать эту строку даты и времени из внешнего интерфейса и сохранить ее в
mixing_datetime
иmixing_datetime_utc_offset_seconds
?@bdbd Я добавляю больше контекста. Внешний интерфейс просто отправляет строку. Обработка будет выполняться в бэкэнде
Хорошо, теперь я понимаю вашу ситуацию. Я удалил свой ответ, так как он не отвечает на ваш вопрос. Но да, настраиваемые поля модели django предназначены для настраиваемых полей, которые в конечном итоге будут отражены в базе данных, поэтому, если вы хотите сделать это таким образом, вам, вероятно, придется много переопределять.
Вероятно, вы можете просто написать метод (в классе модели или в качестве примеси), который принимает строку даты и времени и обрабатывает ее для этих двух полей модели. Это должно быть довольно просто обрабатывать в сериализаторах/представлении