调整JSONField以自动转换为十进制

时间:2017-09-18 18:25:38

标签: json django django-1.10 django-postgresql django-jsonfield

我的模型包含以下类型的字段:

django.contrib.postgres.fields.JSONField

我希望它始终通过以下方式反序列化:

json.loads(value, parse_int=decimal.Decimal, parse_float=decimal.Decimal)

通过以下方式访问对象时

MyModel.objects.get(..)

但是我发现很难自定义,因为json.loads的行必须被上面一行覆盖

psycopg2/_json.py

def _create_json_typecasters的内部方法中。

所以我希望不得不改变我的模型字段类型, 或者有一种更简单的方法可以告诉Django如何准备我的模型?

1 个答案:

答案 0 :(得分:1)

我找到了它:

psycopg2.extras.register_default_json(loads=my_loads_func)
psycopg2.extras.register_default_jsonb(loads=my_loads_func)  # for Postgres jsonb

或以更复杂的方式进行调整: psycopg2 docs