如何从 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-jsonfield
pypi包:
pip install django-jsonfield
然后简单地使用它:
from jsonfield import JSONField
class MyModel(models.Model):
custom_field = JSONField(
default=dict
)
【讨论】:
以上是关于如何从 django 模型中为模型字段定义 json 类型的主要内容,如果未能解决你的问题,请参考以下文章