在DRF中将实例传递给序列化器是否合理?

时间:2017-03-04 14:28:07

标签: python django django-rest-framework

假设我有一个序列化DeviceGroup和一个APIView类,用于将设备发布到组中。

DeviceGroup的序列化程序是

class DeviceGroupSerializer(serializers.ModelSerializer):
    id = serializers.UUIDField(source='token', format='hex', read_only=True)
    class Meta:
        model = DeviceGroup
        fields = ['id','name']

class DevicesGroupsAPIView(APIView):
    permission_classes = (permissions.IsAuthenticated,)
    def post(self, request, token=None, format=None):
        print('reqquest', request.data)
        print('token', token)
        device_group_instance = DeviceGroup.objects.get(token=token)
        for device_token in request.data['devices']:
            device = Device.objects.get(token=device_token, owner=request.user)
            device.group = device_group_instance
            device.save()

在上面的post函数中,必须创建一个serializer实例并检查序列化器是否有效然后返回响应。

设备和DeviceGroup之间的关系是设备只能在一个组上,一个组可以有多个设备(设备ID列表)

如果我需要使用DeviceGroupSerializer发布设备列表,那么帖子功能应该怎样?我不明白这个序列化器并清楚地查看部分。

1 个答案:

答案 0 :(得分:0)

Django REST框架松散耦合,因此您可以绕过序列化器。

但是,根据您的工作情况,这可能需要一些工作。请注意,对于POST,您可以自己执行一些检查。

关于Django REST框架性能优化的Tom Christies post说明了如何删除框架的部分内容。