chcę mieć w sumie tylko do odczytu ModelSerializer
, to tylko lista/odzyskać metodDjango Framework Reszta Read Only model serializer
jaki jest najlepszy sposób to zrobić?
chcę mieć w sumie tylko do odczytu ModelSerializer
, to tylko lista/odzyskać metodDjango Framework Reszta Read Only model serializer
jaki jest najlepszy sposób to zrobić?
Jedyne, co musisz zrobić, to stworzyć taki serializator. serializers.py
class YourdataSerializer(serializers.ModelSerializer):
class Meta:
model = Yourdata
# some data
fields = ('id', 'city', 'pincode', 'created')
read_only_fields = ('id', 'city', 'pincode', 'created')
Odwiedzin coś takiego
class YourdataList(APIView):
def get(self, request, format=None):
yourdata = YourdataList.objects.all()
serializer = YourdataSerializer(yourdata, many=True)
return Response(serializer.data)
widoku szczegółów
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)
Będzie to zrobić.
Jednym ze sposobów na usprawnienie tego jest posiadanie 'read_only_fields = fields' w' Meta'. –
OK, kochany Mohsen, Aby zaimplementować serializer tylko do odczytu przy użyciu klasy BaseSerializer, wystarczy zastąpić metodę .to_representation(). Rzućmy okiem na przykład za pomocą prostego modelu Django:
class HighScore(models.Model):
created = models.DateTimeField(auto_now_add=True)
player_name=models.CharField(max_length=10)
score = models.IntegerField()
To proste, aby utworzyć tylko do odczytu serializatora do konwersji instancji Najlepszy wynik w prymitywnych typów danych.
class HighScoreSerializer(serializers.BaseSerializer):
def to_representation(self, obj):
return { 'score': obj.score, 'player_name': obj.player_name }
Zobacz mój komentarz do mojego posta. dziękuję Hamed, – Mohsen
To zależy od widoku, ale twoja odpowiedź dotyczyła tylko serializerów tylko do odczytu. –
Początkowo szukałem rozwiązania na poziomie Serializera, ale jest to bardziej naturalne, aby obsłużyć je na poziomie widoku, a do tego jest ReadOnlyModelViewSet – Mohsen
Naprawdę chcesz to zrobić w widoku poziomu (lub Viewset), co można zrobić z ReadOnlyModelViewSet.
(Wspomniałeś o tym w swoim komentarzu, ale pozostawiam to jako odpowiedź dla lepszej widoczności).
Czy tego chcesz, czy chcesz usunąć tworzenie/aktualizację z zestawów widoków? – Linovia
Dobra pozycja @Linovia, właściwie szukam dla [ReadOnlyModelViewSet] (http://www.django-rest-framework.org/api-guide/viewsets/#readonlymodelviewset) – Mohsen