peo*_*eon 4 django django-rest-framework
我有一个简单的ModelSerializer,我想对列表/细节使用不同的字段,如下所示,是否可能?
class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
list_fields = ('id', 'name')
detailed_fields = ('id', 'name', 'long_column')
Run Code Online (Sandbox Code Playgroud)
我个人会做的是为列表与细节设置不同的序列化程序.ModelViewSet有一个list()和retrieve()方法.在下面的示例中,我重写了retrieve()方法并将serializer_class属性设置为声明的"detail"序列化程序.当它调用时super(),我们现在使用详细的序列化器.该list()会继续使用ItemListSerializer.
另外,如果您要继续使用此模式,最好使用自定义list_fields和创建自己的ModelViewSet类detail_fields.
from rest_framework.serializers import ModelSerializer
from rest_framework.viewsets import ModelViewSet
class ItemListSerializer(ModelSerializer):
class Meta:
model = Item
fields = ('id', 'name')
class ItemDetailSerializer(ModelSerializer):
class Meta:
model = Item
fields = ('id', 'name', 'long_column')
class ItemViewSet(ModelViewSet):
queryset = Item.objects.all()
serializer_class = ItemListSerializer
def retrieve(self, request, *args, **kwargs):
self.serializer_class = ItemDetailSerializer
return super(ItemViewSet, self).retrieve(request, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
938 次 |
| 最近记录: |