【发布时间】:2018-06-18 17:32:13
【问题描述】:
我必须将 JSON 字符串保存到 Django 模型中,并且很好奇我应该使用哪种字段类型。我以前见过JSONField,但肯定TextField 会做同样的工作,因为JSON 是一个字符串?
我应该使用什么类型的字段?
【问题讨论】:
我必须将 JSON 字符串保存到 Django 模型中,并且很好奇我应该使用哪种字段类型。我以前见过JSONField,但肯定TextField 会做同样的工作,因为JSON 是一个字符串?
我应该使用什么类型的字段?
【问题讨论】:
这在一定程度上是正确的,但对于 PostgreSQL(现在所有数据库后端,见下文)至少有一个特定的数据库 JSON 字段类型。这意味着您可以根据该字段的内容查询模型。来自 Django 文档https://docs.djangoproject.com/en/2.0/ref/contrib/postgres/fields/#querying-jsonfield:
>>> Dog.objects.create(name='Rufus', data={
... 'breed': 'labrador',
... 'owner': {
... 'name': 'Bob',
... 'other_pets': [{
... 'name': 'Fishy',
... }],
... },
... })
>>> Dog.objects.create(name='Meg', data={'breed': 'collie'})
>>> Dog.objects.filter(data__breed='collie')
<QuerySet [<Dog: Meg>]>
此外,当您执行dog.data 时,字段值会自动转换为其本机 Python 格式,在本例中为字典。使用 TextField 您必须将data = json.reads(dog.data) 作为显式步骤。 (我相信这发生在字段类型的from_db_value() 方法中。)
2020 年 8 月 4 日更新:从 Django 3.1 开始,JSONField 可用于所有受支持的数据库后端https://www.djangoproject.com/weblog/2020/aug/04/django-31-released/
【讨论】: