json - django postgresql json 字段模式验证

标签 json django postgresql jsonschema

我有一个带有 JSONField 的 django 模型 (django.contrib.postgres.fields.JSONField) 有什么方法可以根据 json 模式文件验证模型数据吗?

(预存)
类似于 my_field = JSONField(schema_file=my_schema_file)

最佳答案

我使用 jsonschema 编写了一个自定义验证器为了做到这一点。

project/validators.py

import django
from django.core.validators import BaseValidator
import jsonschema
    

class JSONSchemaValidator(BaseValidator):
    def compare(self, value, schema):
        try:
            jsonschema.validate(value, schema)
        except jsonschema.exceptions.ValidationError:
            raise django.core.exceptions.ValidationError(
                '%(value)s failed JSON schema check', params={'value': value}
            )

project/app/models.py

from django.db import models

from project.validators import JSONSchemaValidator

MY_JSON_FIELD_SCHEMA = {
    'schema': 'http://json-schema.org/draft-07/schema#',
    'type': 'object',
    'properties': {
        'my_key': {
            'type': 'string'
        }
    },
    'required': ['my_key']
}

class MyModel(models.Model):
    my_json_field = models.JSONField(
        default=dict,
        validators=[JSONSchemaValidator(limit_value=MY_JSON_FIELD_SCHEMA)]
    )

关于json - django postgresql json 字段模式验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37642742/

相关文章:

javascript - 如何计算 JavaScript 中对象数组中的某些元素?

json - 如何向 topojson 文件添加属性?

Django - 显示 create() 的 SQL?

java - 如何将 PostgreSQL 与 Spring Mvc 连接

Django:保存后pkey为none

java - 使用 Java 查询 postgresql 数据库时,我应该保持连接打开吗?

javascript - 如何从 json 对象构建键值的 JavaScript 数组

java - 将复杂的 JSON 转换为 JAVA 对象,其中不同的键将转换为相同类型的对象

带有输出类名的python计时器装饰器

Django 使用注解更新查询集