Ich habe ein Django-Modell mit einem JSONField
(django.contrib.postgres.fields.JSONField) Gibt es eine Möglichkeit, dass ich Modelldaten gegen eine JSON-Schema-Datei validieren kann? (Pre-save)
So etwas wie my_field = JSONField(schema_file=my_schema_file)
django postgresql JSON-Feld Schema-Validierung
1
A
Antwort
2
Das ist, was die Model.clean()
Methode für (see docs) ist. Beispiel:
class MyData(models.Model):
some_json = JSONField()
...
def clean(self):
if not is_my_schema(self.some_json):
raise ValidationError('Invalid schema.')
0
Ich schrieb einen benutzerdefinierten Validator jsonschema, um mit diesem zu tun (Django 1.11, Python 3.6).
# project/validators.py
from jsonschema import validate
from django.core.validators import BaseValidator
class JSONSchemaValidator(BaseValidator):
def compare(self, a, b):
return validate(a, b)
# project/app/models.py
from django.db import models
from django.contrib.postgres.fields import JSONField
from project.validators import JSONSchemaValidator
MY_JSON_FIELD_SCHEMA = {
'type': 'object',
'schema': 'http://json-schema.org/draft-07/schema#',
'properties': {
'my_key': {
'type': 'string'
}
},
'required': ['my_key']
}
class MyModel(models.Model):
my_json_field = JSONField(
default=dict,
validators=[JSONSchemaValidator(limit_value=MY_JSON_FIELD_SCHEMA)]
)
Die kurze Antwort ist nein, jedoch ist es möglich, die Validierung zu erzwingen, indem Sie die Modus-Save-Methode überschreiben. – e4c5