如何删除ViewSet中的任何文件

时间:2019-06-03 01:57:41

标签: django-rest-framework

class DepartSerializer(serializers.HyperlinkedModelSerializer):

    attrs = AttrSerializer(source="depattr", many=True)

    people = PeopleSerializer(source='perdepart', many=True)

    class Meta:
        model = Departs
        fields = ('url', 'name', 'describe', 'pinyin', 'attrs', 'people')

 class DepartsViewSet(viewsets.ReadOnlyModelViewSet):

    """
    i want delete people field in List , and Retain people fieled in retrieve.
    """

    queryset = Departs.objects.filter(disabled=False).order_by('-uptime')

    serializer_class = DepartSerializer

1。我想要这样的结果:
2.获取/离开

[ 
{"name":"depart1","id":1},
{"name":"depart2","id":2},
]

3.get / depart / 1

{
    "name": "depart1",
    "id": 1,
    "people": [{
            "id": 1,
            "name": "per1"
        },
        {
            "id": 2,
            "name": "per2"
        }
    ]
}

1 个答案:

答案 0 :(得分:0)

您可以通过覆盖视图集的get_serializer_class来根据操作在视图集中使用不同的序列化器:

def get_serializer_class(self):
    if self.action == 'retrieve':
        return DepartSerializerWithoutPeople
    return DepartSerializer

retrieveget /depart/1/调用的操作。然后,您可以像这样定义DepartSerializerWithoutPeople

class DepartSerializerWithoutPeople(serializers.HyperlinkedModelSerializer):

    attrs = AttrSerializer(source="depattr", many=True)

    class Meta:
        model = Departs
        fields = ('url', 'name', 'describe', 'pinyin', 'attrs',)