Ein Feld im Django-REST-Framework-Serializer dynamisch ausschließen oder einbeziehen
Habe ich ein serializer in Django REST framework wie folgt definiert:
class QuestionSerializer(serializers.Serializer):
id = serializers.CharField()
question_text = QuestionTextSerializer()
topic = TopicSerializer()
Nun habe ich zwei API-Ansichten, die die oben genannten serializer:
class QuestionWithTopicView(generics.RetrieveAPIView):
# I wish to include all three fields - id, question_text
# and topic in this API.
serializer_class = QuestionSerializer
class QuestionWithoutTopicView(generics.RetrieveAPIView):
# I want to exclude topic in this API.
serializer_class = ExamHistorySerializer
Eine Lösung ist das schreiben von zwei verschiedenen serialisierungsprogramme. Aber es muss doch eine einfachere Lösung bedingt ausschließen, ein Feld aus einem bestimmten serializer.
InformationsquelleAutor der Frage Sudip Kafle | 2015-01-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie versucht, diese Technik
Wenn nicht, mal versuchen.
InformationsquelleAutor der Antwort Bishnu Bhattarai
Erstellen einer neuen serializer ist der Weg zu gehen. Bedingt durch entfernen von Feldern in einem serializer, den Sie hinzufügen, zusätzliche Komplexität, und machen Sie die code-härter, schnell zu diagnostizieren. Sie sollten versuchen, zu vermeiden, mischen die Verantwortung einer einzelnen Klasse.
Folgenden grundlegenden Objekt-orientierte design-Prinzipien ist der Weg zu gehen.
QuestionWithTopicView ist ein QuestionWithoutTopicView aber mit einem zusätzlichen Feld.
InformationsquelleAutor der Antwort user1042361