我必须将JSON字符串保存到Django模型,并且好奇我应该使用哪种字段类型。我之前看到过使用JSONField
,但由于JSON是一个字符串,所以TextField
肯定会做同样的工作吗?
我应该使用哪种类型的字段?
答案 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()
方法中。)