2016-06-07 147 views
1

我在序列化程序中遇到了一些問題。我正在調用一個我希望它調用序列化器的post方法。另外我想讓用戶發送到序列化程序。我的發佈方法是:在django rest框架中調用序列化程序

def post(self, request, *args, **kwargs): 
    serializer = ResourceListSerializer(context={'request': request}, data={}) 
    serializer.is_valid(raise_exception=True) 
    serializer.save(creator=request.user) 

但它似乎並沒有得到串行器中的數據。在序列化程序中,self.validated_data似乎是空的。這是串行器上的代碼:

def save(self, **kwargs): 
    """ 
    Update `project` and `resource_type` fields in database. 
    """ 
    resources = self.validated_data.get('resources') 
    if resources is not None and len(resources) > 0: 
     self.validated_data['project'] = self.validated_data['resources'][0].project 
     self.validated_data['resource_type'] = self.validated_data['resources'][0].resource_type 

    try: 
     project = self.data.get('project') 
     return super(ResourceListSerializer, self).save(**kwargs) 
    except: 
     try: 
      project = self.validated_data['project'] 
      return super(ResourceListSerializer, self).save(**kwargs) 
     except: 
      raise serializers.ValidationError("Resource List should belong to a Project.") 

有關如何正確調用序列化程序的任何建議?

+1

您明確地將一個空的字典傳遞給序列化程序。 –

+0

@DanielRoseman是數據= {}的一部分嗎?我認爲上下文有所有必要的信息。 –

回答

4

通過data實例化您的序列化程序,而不是context

def post(self, request, *args, **kwargs): 
    serializer = ResourceListSerializer(data=request.data) 
    serializer.is_valid(raise_exception=True) 
    serializer.save(creator=request.user) 

你只需要context通過額外上下文。除非你的序列化程序中有訪問self.context的自定義代碼,否則你不需要它。

相關問題