当序列化类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
完美解决
思考:当然这个也可以通过重载
本文探讨了在使用带有depth属性的序列化类时,如何处理引用字段变为只读的问题。通过定义两种序列化类,并根据HTTP请求类型选择使用,解决了在更新或创建操作时的限制。
411

被折叠的 条评论
为什么被折叠?



