【问题标题】:how to define a json type to a model field from django models如何从 django 模型中为模型字段定义 json 类型
【发布时间】: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 个字符限制的不同字段吗?
  • 是那个文本字段,无论如何请你发布你遵循的程序或语法。
  • 应用程序。!!错误来自其他领域。知道了,伙计。

标签: python json django postgresql


【解决方案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
            )
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-04-15
          • 1970-01-01
          • 1970-01-01
          • 2019-06-18
          • 2012-01-06
          • 2012-10-22
          • 1970-01-01
          相关资源
          最近更新 更多