Ich bin auf die Implementierung eines verschachtelten Serialisierers gestoßen, daher schreibe ich ihn als Notiz.
pip install drf-flex-fields
model
model.py
class User(models.Model):
username = models.CharField(max_length=255)
class Tag(models.Model):
name = models.CharField(max_length=255)
class Book(models.Model):
title = models.CharField(max_length=255)
author = models.ForeignKey(User, on_delete=models.CASCADE)
tag = models.ManyToManyField(Tag)
serializer
serializers.py
from rest_flex_fields import FlexFieldsModelSerializer
class UserSerializer(FlexFieldsModelSerializer):
class Meta:
model = User
fields = ("id", "username")
class TagSerializer(FlexFieldsModelSerializer):
class Meta:
model = User
fields = ("id", "name")
class BookSerializer(FlexFieldsModelSerializer):
class Meta:
model = Book
fields = ("id", "title", "author", "tag")
expandable_fields = { #expandable_In Feldern verschachtelt
"author": UserSerializer,
"tag": (TagSerializer, {"many": True}) #Viel zu viel
}
Response
[
{
"id": 1,
"title": title_1,
"author": 1,
"tag": [
1,
2,
]
},
]
Dynamische Daten mit Parametern anzeigen
Möglichkeit | Erläuterung |
---|---|
expand | Erweitern Sie das angegebene Feld |
fields | Nur angegebene Felder anzeigen |
omit | Das angegebene Feld wird nicht angezeigt |
expand http://localhost:8000/book/1?expand=author,tag Erweitern Sie Autor und Tag
[
{
"id": 1,
"title": title_1,
"author": {
"id": 1,
"username": "user_1"
},
"tag": [
{
"id": 1,
"name": "tag_1"
},
{
"id": 2,
"name": "tag_2"
},
]
},
]
fields http://localhost:8000/book/1?fields=title Zeigen Sie nur den Titel an
[
{
"title": title_1,
},
]
omit http://localhost:8000/book/1?omit=title Zeigen Sie den Titel nicht an
[
{
"id": 1,
"author": 1,
"tag": [
1,
2,
]
},
]
rsinger86/drf-flex-fields - github drf-flex-fields - pypi
Recommended Posts