python / expert
Snippet
Django-Formular-Array-Validierung mit granularer Fehlererfassung
Das Validieren array-artiger Datensätze in Django-Formularfeldern erfordert eine granulare Fehlererfassung. Dieses Snippet zeigt das Iterieren über Elemente in einer Liste/einem Array, das Ausführen von Validierungsprüfungen pro Element und das Auslösen aggregierter ValidationErrors.
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 import formsfrom django.core.exceptions import ValidationErrorclass BatchIdListField(forms.CharField):"""Custom form field parsing and validating arrays of integer identifiers."""def clean(self, value):raw_value = super().clean(value)if not raw_value:return []tokens = [token.strip() for token in raw_value.split(",")]validated_ids = []errors = []for index, token in enumerate(tokens):if not token.isdigit():errors.append(ValidationError(f"Item at index {index} ('{token}') is not a valid integer."))else:validated_ids.append(int(token))if errors:raise ValidationError(errors)return validated_ids
django
Erklärung
1
class BatchIdListField(forms.CharField):
Untergliedert CharField, um rohen Eingabetext in ein validiertes Integer-Listen-Array zu transformieren.
2
tokens = [token.strip() for token in raw_value.split(",")]
Trennt kommagetrennte Zeichenfolgen in ein Array von String-Tokens.
3
for index, token in enumerate(tokens):
Iteriert über jedes Element im Array und behält dabei die Indexpositionen für den Fehlerkontext bei.
4
if errors: raise ValidationError(errors)
Löst eine Liste erfasster ValidationError-Instanzen aus, damit Django-Formulare alle Benachrichtigungen über ungültige Elemente gleichzeitig anzeigen.