使用JSONField时,读取值时内容会自动从JSON解码为Python对象。我有一个使用案例,需要将字符串编码为JSON格式以嵌入到模板中。是否有办法只获取对象的原始JSON字符串?
使用JSONField时,读取值时内容会自动从JSON解码为Python对象。我有一个使用案例,需要将字符串编码为JSON格式以嵌入到模板中。是否有办法只获取对象的原始JSON字符串?
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
json.dumps
将 Python 对象转换为 JSON 数据块。 - Willem Van Onsemjson_string
,而不是json.dumps(json.loads(json_string))
。 - Tim Tisdall