2016-06-12 7 views
1

Ich benutze Django Rest Framework und habe ein HTML-Formular, das Daten an die Rest-API sendet. Ich mache einen serializer.is_valid check und save() auf die Anfrage Daten. In der Front-End-Form habe ich ein ID-Feld, das ein Fremdschlüssel im Modell des Serialisierers ist. Und wenn serializer.is_valid ausgeführt wird, wird ein Fehler ausgegeben, der besagt, dass das Fremdschlüsselobjekt fehlt. Um dies zu überwinden, versuche ich, die Foreign-Key-Objektinstanz unter Verwendung der ID aus dem Eingabe-HTML-Formular zu erhalten und sie in die Serializer-Daten einzufügen.Validierung eines Fremdschlüsselfelds in einem Serializer Django Rest Framework

Ich habe eine Definition validate_ in meinem Serialisierer geschrieben und gehe davon aus, dass es ausgeführt wird (gemäß diesem Tutorial - http://www.django-rest-framework.org/api-guide/serializers/#validation), wenn serializer.is_valid() ausgeführt wird. Aber diese Definition wird nicht ausgeführt. Schätze Hilfe.

class TeamViewSet(viewsets.ModelViewSet): 
    serializer_class = TeamSerializer 
    queryset = Team.objects.all() 
    def create(self, request, *args, **kwargs): 

     permission_classes = (
      permissions.IsAuthenticated 
     ) 
     serializer = self.get_serializer(data=request.data) 
     serializer.is_valid() 


     return Response(.....) 

Serializer

class TeamSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Team 
     fields = ('id','name','description','leader') 

    def validate_leader(self, leader_id): 
     try: 
      data = Leaders.objects.get(id=leader_id) 
     except Exception as e: 
      raise ValidationError(....) 
     return data 
+0

Bitte fügen Sie den Code hinzu. –

+0

@Rahul Gupta Hinzugefügt Code –

+1

anstelle von 'außer Ausnahme als e:' können Sie 'Leaders.DoesNotExist' verwenden ie. Für jedes Modell können Sie 'Model.DoesNotExist' verwenden. –

Antwort

1

ich es bekommen. Die Validierungsmethode wird nicht ausgeführt, wenn das Feld nicht in den Anforderungsdaten enthalten ist. Nachdem ich das Feld in die Anforderungsdaten eingefügt habe, wird die Validierungsmethode für dieses Feld ausgeführt.

+0

Können Sie den Code bitte teilen? –

Verwandte Themen