2016-06-07 8 views
1

Ich habe einige Probleme mit dem Serializer. Ich rufe eine Post-Methode an, die ich den Serializer nennen möchte. Auch möchte ich den Benutzer an den Serializer gesendet haben. meine post-Methode ist:Aufruf Serializer in Django Rest Framework

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

aber es scheint nicht immer die Daten in Serializer werden. Im Serializer scheint self.validated_data leer zu sein. Dies ist der Code auf dem Serializer:

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.") 

ein Vorschlag, wie Sie den Serializer richtig aufrufen?

+1

Sie übergeben explizit ein leeres Diktat an den Serializer. –

+0

@DanielRoseman ist es der Teil auf Daten = {}? Ich dachte Kontext hat alle notwendigen Informationen. –

Antwort

4

Übergeben Sie data, wenn Sie Ihren Serializer instanziieren, nicht context.

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

Sie benötigen context nur zusätzliche Zusammenhang zu bestehen. Wenn Sie keinen benutzerdefinierten Code in Ihrem Serializer haben, der auf self.context zugreift, brauchen Sie ihn nicht.

Verwandte Themen