0 Tage Serie
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
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from rest_framework import serializers
from .models import Author, Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ['id', 'title', 'isbn', 'published_date']
class AuthorSerializer(serializers.ModelSerializer):
books = BookSerializer(many=True, read_only=True)
book_count = serializers.SerializerMethodField()
class Meta:
model = Author
fields = ['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