【问题标题】:Difference between Django JSONField and TextFieldDjango JSONField 和 TextField 的区别
【发布时间】:2018-06-18 17:32:13
【问题描述】:

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

我应该使用什么类型的字段?

【问题讨论】:

    标签: json django


    【解决方案1】:

    这在一定程度上是正确的,但对于 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/

    【讨论】:

    • 什么是PostgreSQL?它是另一种数据库类型吗?如果是,我还可以将 JSONField 与默认的 sqlite3 数据库一起使用吗?
    • 是的。 Django 支持多种,但最常见的可能是 Postgres,AKA PostgreSQL。请参阅文档中的 Databases。 JSONField 不适用于 sqlite3。我没有尝试过,但我想当你尝试运行迁移时它会失败。
    • 对于 sqlite3 和 JSONField 迁移运行得很好,但添加了一个模型 w。 JSONField 以错误结尾
    猜你喜欢
    • 1970-01-01
    • 2011-11-13
    • 2013-01-01
    • 1970-01-01
    • 2020-12-20
    • 2019-07-06
    • 2014-04-21
    相关资源
    最近更新 更多