私はすなわちちょうどリスト/メソッドにDjangoの残りFrameworkの読み取り専用モデルシリアライザ
を取得し、それを行うための最善の方法は何ですか?、唯一ModelSerializer
読ん合計を持つようにしたいですか
私はすなわちちょうどリスト/メソッドにDjangoの残りFrameworkの読み取り専用モデルシリアライザ
を取得し、それを行うための最善の方法は何ですか?、唯一ModelSerializer
読ん合計を持つようにしたいですか
このようなシリアライザを作成するだけです。 serializers.py
class YourdataSerializer(serializers.ModelSerializer):
class Meta:
model = Yourdata
# some data
fields = ('id', 'city', 'pincode', 'created')
read_only_fields = ('id', 'city', 'pincode', 'created')
ビューこの
class YourdataList(APIView):
def get(self, request, format=None):
yourdata = YourdataList.objects.all()
serializer = YourdataSerializer(yourdata, many=True)
return Response(serializer.data)
詳細ビュー
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)
これはそれを行いますのようなもの。
これを少し簡素化する1つの方法は、 'meta'の' read_only_fields = fields'です。 –
親愛なるMohsen、BaseSerializerクラスを使用して読み取り専用シリアライザを実装するには、.to_representation()メソッドをオーバーライドする必要があります。のは、シンプルなDjangoのモデルを使用した例を見てみましょう:
class HighScore(models.Model):
created = models.DateTimeField(auto_now_add=True)
player_name=models.CharField(max_length=10)
score = models.IntegerField()
これは、プリミティブデータ型にハイスコアインスタンスを変換するための読み取り専用のシリアライザを作成するために簡単です。
class HighScoreSerializer(serializers.BaseSerializer):
def to_representation(self, obj):
return { 'score': obj.score, 'player_name': obj.player_name }
は、あなたは本当にあなたがReadOnlyModelViewSetで行うことができますビュー(またはビューセット)レベルでこれをやりたいです。
(これはあなたのコメントに記載されていますが、よりわかりやすくするために回答として残しています)。
それはあなたが望むものか、またはビューセットから作成/更新を削除したいですか? – Linovia
良い点@リノビア、実際には[ReadOnlyModelViewSet](http://www.django-rest-framework.org/api-guide/viewsets/#readonlymodelviewset)を探しています – Mohsen