2017-09-28 3 views
1

J'essaie de construire une API REST Django basée sur une classe qui prend en compte les données de la requête POST et génère les données correspondantes.Comment configurer un REST DJANGO nécessitant des informations à partir d'une requête POST?

J'ai une liste des bâtiments dans le DB

State   Building 
California Golden Gate Bridge 
New York  Empire State 
California TransAmerica 
New York  Brooklyn Bridge 

utilisateur fournira l'état par une demande POST (c.-à-Californie), l'API devrait renvoyer le bâtiment approprié (c.-à-Golden Gate Bridge, TransAmerica)

Je suppose que j'ai juste du mal à comprendre comment la classe prend le request.data ['state_id']. Dois-je utiliser APIView? Tant de questions!

Jusqu'à présent, je ceci dans ma view.py

class BuildingViewSet(viewsets.ModelViewSet): 
    queryset = BuildingRule.objects.values('building_name').distinct() 
    serializer_class = BuildingSerializer 

    def post(self, request, *args, **kwargs): 
     queryset = BuildingRule.objects.filter(state_name=request.data['state_id']) 
     return Response(queryset.values_list('building_name', flat=True)) 

Ceci est mon serializer.py

class BuildingSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = BuildingRule 
     fields = ('building_name',) 

Ceci est mon url.py:

router.register(r'buildings', views.BuildingsViewSet, base_name='Building') 
+0

override créer la méthode dans votre viewset .... suivez ce lien https://stackoverflow.com/questions/40999386/custom-function-which-performs-create-and-update-on-drf-modelviewset – amrit

+1

Créer une méthode dans le Viewset n'est pas la bonne façon de le faire. Avec DRF et un Serializer, utilisez simplement l'attribut 'required' sur un Field comme je l'ai décrit dans ma réponse. –

Répondre