ich insgesamt nur ModelSerializer
gelesen haben will, das heißt nur Liste/abrufen MethodenDjango Rastrahmen Read Only Modell Serializer
was ist der beste Weg, es zu tun?
ich insgesamt nur ModelSerializer
gelesen haben will, das heißt nur Liste/abrufen MethodenDjango Rastrahmen Read Only Modell Serializer
was ist der beste Weg, es zu tun?
Das einzige, was Sie tun müssen, ist einen Serializer wie folgt zu erstellen. serializers.py
class YourdataSerializer(serializers.ModelSerializer):
class Meta:
model = Yourdata
# some data
fields = ('id', 'city', 'pincode', 'created')
read_only_fields = ('id', 'city', 'pincode', 'created')
Ansichten so etwas wie diese
class YourdataList(APIView):
def get(self, request, format=None):
yourdata = YourdataList.objects.all()
serializer = YourdataSerializer(yourdata, many=True)
return Response(serializer.data)
Detailansicht
class YourdataDetail(APIView):
def get_object(self, pk):
try:
return Yourdata.objects.get(pk=pk)
except Yourdata.DoesNotExist:
raise Http404
def get(self, request, pk, format=None):
snippet = self.get_object(pk)
serializer = YourdataSerializer(snippet)
return Response(serializer.data)
Dies wird es tun.
Ein Weg, um dies ein wenig stromlinienförmiger zu machen ist zu haben 'read_only_fields = fields' in' Meta'. –
Ok lieber Mohsen, Um einen schreibgeschützten Serializer mit der BaseSerializer-Klasse zu implementieren, müssen wir nur die .to_representation() -Methode überschreiben. Lassen Sie uns einen Blick darauf werfen, ein einfaches Django-Modell an einem Beispiel mit:
class HighScore(models.Model):
created = models.DateTimeField(auto_now_add=True)
player_name=models.CharField(max_length=10)
score = models.IntegerField()
Es ist einfach, einen Nur-Lese-Serializer zur Umwandlung von Highscore-Instanzen in primitiven Datentypen zu erstellen.
class HighScoreSerializer(serializers.BaseSerializer):
def to_representation(self, obj):
return { 'score': obj.score, 'player_name': obj.player_name }
Blick auf meinen Kommentar zu meinem eigenen Beitrag. Danke Hamed, – Mohsen
Das ist abhängig von der Ansicht, aber Ihre Antwort war über nur Serialisierer lesen –
Ich war zunächst auf der Suche nach einer Lösung in Serializer-Ebene, aber es ist natürlicher, es in View-Level zu behandeln, und es gibt ReadOnlyModelViewSet dafür – Mohsen
Sie wirklich wollen, dies im Blick (oder Viewset) Ebene tun, die Sie mit einem ReadOnlyModelViewSet tun können.
(Sie erwähnten dies in Ihrem Kommentar, aber ich lasse es als eine Antwort für bessere Sichtbarkeit).
Möchten Sie die Create/update aus den View-Sets entfernen? – Linovia
guter Punkt @Linovia, eigentlich bin ich auf der Suche nach [ReadOnlyModelViewSet] (http://www.django-rest-framework.org/api-guide/viewsets/#readonlymodelviewset) – Mohsen