Сериализация необработанных значений из postgres в пользовательском поле django - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь создать настраиваемое поле, чтобы иметь возможность хранить даты до нашей эры в моей базе данных.Он будет принимать кортеж Julian Date в качестве входных данных и преобразовывать его в JDN через библиотеку jdcal.Проблема в том, что встроенный в Python модуль datetime не поддерживает даты BC, поэтому я не могу проанализировать значения БД через него.Я думаю, что мое поле сохранено для правильного сохранения, но я не уверен, как сериализовать необработанное значение 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)
...