python / intermediate
Snippet
Django Model Serializer mit verschachtelten Beziehungen
Django REST Framework Serializer bewältigen komplexe Datentransformationen zwischen Django-Modellen und JSON. Dieses Beispiel zeigt verschachtelte Serializer, bei denen die serialisierten Daten eines Autors seine zugehörigen Bücher und ein berechnetes Feld für die Buchanzahl enthalten.
snippet.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from rest_framework import serializersfrom .models import Author, Bookclass BookSerializer(serializers.ModelSerializer):class Meta:model = Bookfields = ['id', 'title', 'isbn', 'published_date']class AuthorSerializer(serializers.ModelSerializer):books = BookSerializer(many=True, read_only=True)book_count = serializers.SerializerMethodField()class Meta:model = Authorfields = ['id', 'name', 'email', 'books', 'book_count']def get_book_count(self, obj):return obj.books.count()
django
Erklärung
1
BookSerializer(serializers.ModelSerializer)
ModelSerializer generiert automatisch Felder basierend auf der Modelldefinition
2
books = BookSerializer(many=True, read_only=True)
Der many=True Parameter zeigt eine Eins-zu-viele-Beziehung an, read_only vermeidet das Anfordern von Büchern bei Eingabe
3
SerializerMethodField()
Benutzerdefiniertes Feld, das eine Methode aufruft, um seinen Wert dynamisch zu berechnen
4
def get_book_count(self, obj):
Methode erhält die Autoreninstanz und gibt die berechnete Buchanzahl zurück