Django JSONField和TextField之间的区别

时间:2018-01-09 16:10:05

标签: json django

我必须将JSON字符串保存到Django模型,并且好奇我应该使用哪种字段类型。我之前看到过使用JSONField,但由于JSON是一个字符串,所以TextField肯定会做同样的工作吗?

我应该使用哪种类型的字段?

1 个答案:

答案 0 :(得分:5)

这在某种程度上是正确的,但是对于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()方法中。)