python / intermediate
Snippet
Django REST Framework Benutzerdefinierte Serializer-Feldvalidierung
Dieses Snippet zeigt Validierungstechniken für Django REST Framework Serializer. ModelSerializer bietet automatische Validierung, aber benutzerdefinierte Feldvalidierung ermöglicht feinkörnige Kontrolle. Die validate_<Feld> Methode prüft einzelne Felder, während validate() objektebene Validierung über mehrere Felder durchführt. Dieses Muster stellt Datenintegrität vor dem Erreichen der Datenbank sicher.
snippet.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from rest_framework import serializersfrom .models import Productclass ProductSerializer(serializers.ModelSerializer):price = serializers.DecimalField(max_digits=10,decimal_places=2,min_value=0.01)class Meta:model = Productfields = ['id', 'name', 'price', 'stock']def validate_price(self, value):if value < 0:raise serializers.ValidationError("Price cannot be negative")return valuedef validate_stock(self, value):if value < 0:raise serializers.ValidationError("Stock cannot be negative")return valuedef validate(self, data):if data.get('price') and data.get('stock'):total_value = data['price'] * data['stock']if total_value > 1000000:raise serializers.ValidationError("Total inventory value exceeds limit")return data
django
Erklärung
1
from rest_framework import serializers
Importiere DRF Serialisierer-Modul für Serialisierer-Klassen
2
price = serializers.DecimalField(...)
Definiere benutzerdefiniertes DecimalField mit Präzisions- und Minimalwertgrenzen
3
def validate_price(self, value):
Benutzerdefinierte Feld-Level-Validierungsmethode für das Preis-Feld
4
raise serializers.ValidationError(...)
Validierungsfehler auslösen wenn Preis negativ ist
5
def validate(self, data):
Objekt-Level-Validierungsmethode die auf alle Felder im Daten-Dictionary zugreift
6
total_value = data['price'] * data['stock']
Berechne bereichsübergreifende Geschäftsregel-Einschränkung
7
raise serializers.ValidationError(...)
Ablehnung wenn Gesamtlagerbestandswert Geschäftslimit überschreitet