2016-06-07 4 views
1

У меня возникли проблемы с сериализатором. Я вызываю метод post, который я хочу, чтобы он вызывал сериализатор. Также я хочу, чтобы пользователь отправил сериализатору. мой почтовый метод:вызов serializer в каркасе отдыха django

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

Вы явно передаете пустой dict в сериализатор. –

+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, вам это не нужно.

Смежные вопросы