首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在模型中使用Django JSONField

在模型中使用Django JSONField
EN

Stack Overflow用户
提问于 2021-05-10 11:24:58
回答 2查看 10.9K关注 0票数 1

我正在创建REST。

代码语言:javascript
复制
django==3.2.2
djangorestframework==3.12.4
psycopg2==2.8.6

我对Django很陌生,python。我在Django模型中寻找一种使用JSON字段的方法。我的模特看起来-

代码语言:javascript
复制
class Question(BaseModel):
.... other code...
    attributes = models.JSONField()

现在,我希望属性是一个JSON,如下所示

代码语言:javascript
复制
{
    "index": 0,
    "guid": "95161b18-75a8-46bf-bb1f-6d1e16e3d60b",
    "isActive": false,
    "latitude": -25.191983,
    "longitude": -123.930584,
    "tags": [
      "esse",
      "sunt",
      "quis"
    ],
    "friends": [
      {
        "id": 0,
        "name": "Contreras Weeks"
      },
      {
        "id": 1,
        "name": "Dawn Lott"
      }
    ]
}

我应该创建一个新的模型,但是创建一个新的模型会使它添加到我不想要的迁移中。

  1. 如何创建上述模型?
  2. 如何使用Django ORM提供的默认验证?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-13 03:43:23

我想-我们可以为django使用pydantic或schema。它们也提供验证。我更喜欢平阳药。

  1. https://github.com/keleshev/schema
  2. https://pydantic-docs.helpmanual.io/

编辑

Pydentic示例

模式

代码语言:javascript
复制
from typing import List
from pydantic import (
    BaseModel,
    StrictBool,
    StrictInt,
    StrictStr,
)

class Foo(BaseModel):
count: int
size: float = None


class Bar(BaseModel):
    apple = 'x'
    banana = 'y'

class AttributesSchema(BaseModel):
    point: StrictInt
    value: StrictStr
    foo: Foo
    bars: List[Bar]

将返回类似的JSON

代码语言:javascript
复制
{
    'point': 2,
    'value': 'Any string'
    'foo': {'count': 4, 'size': None},
    'bars': [
        {'apple': 'x1', 'banana': 'y'},
        {'apple': 'x2', 'banana': 'y'},
    ],
}

验证--将其添加到序列化程序中

代码语言:javascript
复制
 schema = AttributesSchema
 try:
   errors = schema.validate(data['attributes'])
 except Exception as errors:
   raise serializers.ValidationError(errors)

参考化脓性文件,它有我们需要的一切。https://pydantic-docs.helpmanual.io/usage/types/

票数 3
EN

Stack Overflow用户

发布于 2021-10-26 09:12:48

Django现在本机支持JSONField

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67469569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档