Django JSONField - 获取源文本

6

使用JSONField时,读取值时内容会自动从JSON解码为Python对象。我有一个使用案例,需要将字符串编码为JSON格式以嵌入到模板中。是否有办法只获取对象的原始JSON字符串?


你可以使用 json.dumps 将 Python 对象转换为 JSON 数据块。 - Willem Van Onsem
@WillemVanOnsem - 我知道。这不是我要问的。我想要的是直接获取 json_string,而不是 json.dumps(json.loads(json_string)) - Tim Tisdall
1个回答

7

Django使用psycopg2.extras.Json来支持Json字段。要将存储在该字段中的原始数据提取为纯文本,您需要将其强制转换为文本类型 [1]。使用Django的Cast函数[2]来注释您的查询集:

from django.db.models.functions import Cast
from django.db.models import TextField

models_with_json_text = Model.objects.annotate(
    json_as_text=Cast("json_field_name", TextField())
)

[1] http://initd.org/psycopg/docs/extras.html#json-adaptation

这个链接提供了在使用Python Psycopg库时,如何适应JSON数据的方法和技巧。

[2] https://docs.djangoproject.com/en/2.2/ref/models/database-functions/#cast

这个链接介绍了Django中的数据库函数之一:Cast。它可以将一个表达式转换为特定的类型。

我原本希望有像 json_field_name__text 这样的东西,但是我预计需要编写自己的 models.Field。这真是一个惊喜!谢谢! - Tim Tisdall

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接