voglio avere un totale di sola lettura ModelSerializer
, vale a dire proprio elenco/recuperare metodiDjango Resto quadro Read Only Modello Serializer
qual è il modo migliore per farlo?
voglio avere un totale di sola lettura ModelSerializer
, vale a dire proprio elenco/recuperare metodiDjango Resto quadro Read Only Modello Serializer
qual è il modo migliore per farlo?
L'unica cosa che devi fare è creare un serializzatore come questo. serializers.py
class YourdataSerializer(serializers.ModelSerializer):
class Meta:
model = Yourdata
# some data
fields = ('id', 'city', 'pincode', 'created')
read_only_fields = ('id', 'city', 'pincode', 'created')
Visualizzazioni qualcosa di simile
class YourdataList(APIView):
def get(self, request, format=None):
yourdata = YourdataList.objects.all()
serializer = YourdataSerializer(yourdata, many=True)
return Response(serializer.data)
dettaglio vista
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)
Questo lo farà.
Un modo per rendere questo un po 'più snella è avere 'read_only_fields = fields' in' Meta'. –
Ok caro Mohsen, per implementare un serializzatore di sola lettura che utilizza la classe BaseSerializer, abbiamo solo bisogno di sovrascrivere il metodo .to_representation(). Diamo un'occhiata a un esempio utilizzando un semplice modello di Django:
class HighScore(models.Model):
created = models.DateTimeField(auto_now_add=True)
player_name=models.CharField(max_length=10)
score = models.IntegerField()
E 'semplice per creare un serializzatore di sola lettura per la conversione di istanze dei punteggi in tipi di dati primitivi.
class HighScoreSerializer(serializers.BaseSerializer):
def to_representation(self, obj):
return { 'score': obj.score, 'player_name': obj.player_name }
guarda il mio commento sul mio post. grazie Hamed, – Mohsen
Questo dipende dalla visualizzazione ma la tua risposta riguardava solo serializzatori di sola lettura –
Inizialmente cercavo una soluzione in livello Serializer, ma è più naturale gestirla a livello di vista, e c'è ReadOnlyModelViewSet per quello – Mohsen
si vuole veramente fare questo la vista (o Viewset) livello, che si può fare con un ReadOnlyModelViewSet.
(l'hai menzionato nel tuo commento ma lo lascio come risposta per una migliore visibilità).
È ciò che si desidera o si desidera rimuovere la creazione/aggiornamento dai set di visualizzazione? – Linovia
buon punto @Linovia, in realtà sto cercando [ReadOnlyModelViewSet] (http://www.django-rest-framework.org/api-guide/viewsets/#readonlymodelviewset) – Mohsen