1. 程式人生 > >DRF depth=1的情況下物件的建立與更新問題

DRF depth=1的情況下物件的建立與更新問題

當序列化類MATE中定義了depth時,這個序列化類中引用欄位(外來鍵)則自動變為只讀,所以進行更新或者建立操作的時候不能使用此序列化類

具體方法是這樣的分別定義兩個序列化類,判斷request的方法並選擇,直接上程式碼:

serializers.py

# ==== 一旦有了depth,引用的欄位就變為只讀了 ====
class GetSetSerializer(serializers.ModelSerializer):

    class Meta:
        model = Set
        fields = '__all__'
        depth = 1
# ==== 這個序列化類沒有depth ==== class UpdateSetSerializer(serializers.ModelSerializer): class Meta: model = Set fields = '__all__'

views.py

class SetViewSet(viewsets.ModelViewSet):
    """
    A viewset that provides default `create()`, `retrieve()`, `update()`,
    `partial_update()`, `destroy()` and `list()` actions.
    """
queryset = Set.objects.all() filter_backends = (DjangoFilterBackend, OrderingFilter) filter_fields = ('production__name', 'available_zone__name', 'trash') # 此處區分請求的HTTP1.1方法 def get_serializer_class(self): serializer_class = self.serializer_class if
self.request.method in ('PUT', 'PATCH'): serializer_class = UpdateSetSerializer if self.request.method == 'GET': serializer_class = GetSetSerializer return serializer_class

完美解決
思考:當然這個也可以通過過載