python / intermediate
Snippet
Benutzerdefiniertes Django-Modellfeld zur erzwungenen validierten JSON-Speicherung
Benutzerdefinierte Django-Modellfelder ermöglichen Entwicklern die Kontrolle darüber, wie Python-Datenstrukturen in Datenbank-Primitive serialisiert und wieder in Python-Objekte deserialisiert werden. Das Überschreiben von to_python verarbeitet Konvertierung und Validierung während Modellbereinigungen.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from django.db import modelsfrom django.core.exceptions import ValidationErrorimport jsonclass ValidatedJSONField(models.TextField):"""Stores dict objects as JSON strings with structural schema validation."""def to_python(self, value):if value is None or isinstance(value, dict):return valuetry:parsed = json.loads(value)if not isinstance(parsed, dict):raise ValidationError("JSON root content must be a dictionary object.")return parsedexcept json.JSONDecodeError as err:raise ValidationError(f"Invalid JSON payload syntax: {err}")def get_prep_value(self, value):if value is None:return valuereturn json.dumps(value)
django
Erklärung
1
class ValidatedJSONField(models.TextField):
Erbt von TextField, um Daten als Text in der zugrundeliegenden relationalen Datenbank zu speichern.
2
def to_python(self, value):
Konvertiert rohe Datenbank-Strings oder Eingabewerte in native Python-Dictionaries bei gleichzeitiger Validierung.
3
raise ValidationError("JSON root content must be a dictionary object.")
Stellt sicher, dass die dekodierte Struktur den erwarteten Datentypen entspricht, bevor sie gespeichert wird.
4
def get_prep_value(self, value):
Wandelt das Python-Dictionary vor der Ausführung von SQL-Abfragen in einen JSON-String um.