2015-07-09 70 views
0

我希望有人可以建議我這樣做:我的序列化程序返回一個空字符串,儘管數據是正確的。Django序列化程序返回空字符串

def foo(self, request, uuid=None): 
     data = JSONParser().parse(request) 
     logger.error(data) 
     serializer = MySerializer(data=data) 
     logger.error(serializer.data) #Empty JSON string 
     something.bar(serializer.data, self.request.user) 
     return Response(status=status.HTTP_201_CREATED) 

MySerializer:

class MySerializer(serializers.Serializer): 

    foo1 = serializers.BooleanField() 
    foo2 = serializers.CharField(max_length=200, required=True) 
    foo3 = serializers.BooleanField() 

    class Meta: 
     fields = ('foo1', 
        'foo2', 
        'foo3') 

由serializer.data串行返回的數據: foo1: '' 和Foo2:假,foo3:假

我要去哪裏錯了?

回答

3

我相信你的答案從rest_framework/serializers.py直接來自:

@property 
def data(self): 
    if hasattr(self, 'initial_data') and not hasattr(self, '_validated_data'): 
     msg = (
      'When a serializer is passed a `data` keyword argument you ' 
      'must call `.is_valid()` before attempting to access the ' 
      'serialized `.data` representation.\n' 
      'You should either call `.is_valid()` first, ' 
      'or access `.initial_data` instead.' 
     ) 
     raise AssertionError(msg) 
1

您需要首先呼籲串行.is_valid()與數據,然後訪問串行數據(其中容祖兒也指出)。

def foo(self, request, uuid=None): 
    data = JSONParser().parse(request) 
    logger.error(data) 
    serializer = MySerializer(data=data) 
    serializer.is_valid(raise_exception=True) # explicitly call .is_valid() first 
    logger.error(serializer.data) #Empty JSON string 
    something.bar(serializer.data, self.request.user) 
    return Response(status=status.HTTP_201_CREATED)