首页 > 解决方案 > 在自定义 django 字段中序列化来自 postgres 的原始值

问题描述

我正在尝试创建一个自定义字段,以便能够在我的数据库中存储 BC 日期。它将一个 Julian Date 元组作为输入,并通过 jdcal 库将其转换为 JDN。问题是 python 的内置 datetime 模块不支持 BC 日期,所以我无法通过它解析 db 值。我想我已经正确保存了我的字段,但是我不确定如何将原始 postgres 值序列化为我自己的表示形式,可能是通过一个元组(year, month, day)来与 jdcal 库保持一致。

from jdcal import gcal2jd

class JDNField(models.DateField):
  description = "A field to save JDN values as postgres `date` types"

  def get_db_prep_value(self, value, *args, **kwargs):
    if value is None:
      return None
    jd = gcal2jd(*value)[0] + gcal2jd(*value)[1] + 0.5
    return f'J{jd}'

  def to_python(self, value):
    if value is None:
      return None
    return # should it go here?

  def from_db_value(self, value, expression, connection, context):
    return self.to_python(value)

标签: pythondjangodjango-modelsjulian-date

解决方案


推荐阅读