Je veux avoir un total en lecture seule ModelSerializer
, à savoir que la liste/récupérer des méthodesDjango Rest Framework Read Only Modèle sérialiseur
quelle est la meilleure façon de le faire?
Je veux avoir un total en lecture seule ModelSerializer
, à savoir que la liste/récupérer des méthodesDjango Rest Framework Read Only Modèle sérialiseur
quelle est la meilleure façon de le faire?
La seule chose à faire est de créer un sérialiseur comme celui-ci. serializers.py
class YourdataSerializer(serializers.ModelSerializer):
class Meta:
model = Yourdata
# some data
fields = ('id', 'city', 'pincode', 'created')
read_only_fields = ('id', 'city', 'pincode', 'created')
Vues quelque chose comme ça
class YourdataList(APIView):
def get(self, request, format=None):
yourdata = YourdataList.objects.all()
serializer = YourdataSerializer(yourdata, many=True)
return Response(serializer.data)
vue détaillée
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)
Cela fera.
Une façon de rendre un peu plus rationalisé est d'avoir 'read_only_fields = fields' dans' Meta'. –
Ok Cher Mohsen, Pour implémenter un sérialiseur en lecture seule en utilisant la classe BaseSerializer, il suffit de surcharger la méthode .to_representation(). Jetons un coup d'oeil à un exemple en utilisant un simple modèle Django:
class HighScore(models.Model):
created = models.DateTimeField(auto_now_add=True)
player_name=models.CharField(max_length=10)
score = models.IntegerField()
Il est simple de créer un sérialiseur en lecture seule pour convertir les instances de highscore en types de données primitifs.
class HighScoreSerializer(serializers.BaseSerializer):
def to_representation(self, obj):
return { 'score': obj.score, 'player_name': obj.player_name }
regardez mon commentaire sur mon propre message. merci Hamed, – Mohsen
Cela dépend de la vue, mais votre réponse était à propos de lecture seule sérialiseurs –
Je cherchais initialement une solution au niveau Serializer, mais il est plus naturel de le gérer au niveau de la vue, et il y a ReadOnlyModelViewSet pour cela – Mohsen
Vous voulez vraiment faire au niveau vue (ou Viewset), que vous pouvez faire avec un ReadOnlyModelViewSet.
(Vous l'avez mentionné dans votre commentaire mais je le laisse comme réponse pour une meilleure visibilité).
Est-ce ce que vous voulez ou voulez-vous supprimer la création/mise à jour à partir des ensembles de vues? – Linovia
bon point @Linovia, en fait je suis à la recherche de [ReadOnlyModelViewSet] (http://www.django-rest-framework.org/api-guide/viewsets/#readonlymodelviewset) – Mohsen