如何从 django 模型中为模型字段定义 json 类型

Posted

技术标签:

【中文标题】如何从 django 模型中为模型字段定义 json 类型【英文标题】:how to define a json type to a model field from django models 【发布时间】:2014-11-11 03:12:11 【问题描述】:

谁能告诉我如何为模型中的特定字段定义 json 数据类型。

我试过了

from django.db import models
import jsonfield

class Test(models.Model):
    data = jsonfield.JSONField()

但是当我说python manage.py sqlall xyz 它将数据字段作为文本

BEGIN;
CREATE TABLE "xyz_test" (
   "data" text NOT NULL
)
; 

我仍然尝试将 json 数据插入该字段,但它给出的错误为:

ERROR:  value too long for type character varying(15)

请有人帮忙。提前致谢。

【问题讨论】:

嗯,在后台JSONField actually is a TextField,所以这不是问题,这是预期的行为。但是,15 个字符的限制有点奇怪 - 你能分享你试图保存的值吗? @yuvi 这是值 - 'name':'xyz', 'email':'xyz@gmail.com', 'phone':'0123456789' 我刚刚重新创建了您的模型,并且能够将该确切值保存到 jsonfield。您确定是 jsonfield 导致了该错误,而不是某些具有 15 个字符限制的不同字段吗? 是那个文本字段,无论如何请你发布你遵循的程序或语法。 应用程序。!!错误来自其他领域。知道了,伙计。 【参考方案1】:

在后台JSONField actually is a TextField,所以从 sqlall 的输出没有问题,这是预期的行为。

此外,我重新创建了您的模型,它工作得很好,无论是作为字符串还是作为 python 字典输入值时,都没有任何字符限制。所以我最好的猜测是,这个问题是一个完全不相关的领域,确实有 15 个字符的限制。

【讨论】:

【参考方案2】:

为某些数据库向 Django 添加了 JSONField 数据类型,以改进对 JSON 的处理。更多信息可在这篇文章中找到:Django 1.9 - JSONField in Models

【讨论】:

【参考方案3】:

你可以试试这个:

from django.contrib.postgres.fields import JSONField

class Test(models.Model):
    data = models.JSONField()

【讨论】:

【参考方案4】:

先安装django-jsonfieldpypi包:

pip install django-jsonfield

然后简单地使用它:

from jsonfield import JSONField

class MyModel(models.Model):
    custom_field = JSONField(
        default=dict
    )

【讨论】:

以上是关于如何从 django 模型中为模型字段定义 json 类型的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 Django 模型中字段的默认值?

在 django 中为模型创造完整历史的最佳方法是啥?

如何更新 MySQL 数据库中的 Django 模型字段

在 django 模型中为 id 设置自动递增初始值

从 Django 模型返回多个字段

如何在 Django Admin 中为作为方法//属性的字段重命名列标签?