2017-08-28 67 views
1

請幫忙。我需要做的是取決於方法 - 這樣的事情來獲得不同的響應或數據:根據方法返回不同的響應或數據 - Django rest框架

如果request.method ==「POST」:

回報所有 項目創建包括最後一個如果request.method == '把'(實際上它只返回>創建的最後一個項目)

其他:

返回的最後一項更新

Views.py

class RubroViewSet(viewsets.ModelViewSet): 
    queryset = Rubro.objects.all() 
    serializer_class = RubroSerializer 

models.py

class Rubro(models.Model): 
    nombre = models.CharField(max_length=50) 
    descripcion = models.TextField() 

    class Meta: 
     verbose_name_plural = 'Rubros' 
     db_table = "core_rubros" 

    def __str__(self): 
     return self.nombre 

serializers.py

class RubroSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Rubro 
     fields = '__all__' 
+0

文檔中提供的示例是否足夠? http://www.django-rest-framework.org/tutorial/2-requests-and-responses/ – BoboDarph

回答

2

使用viewsets.Viewset將是一個簡單的方法。 http://www.django-rest-framework.org/api-guide/viewsets/

或使用@detail_route()

@detail_route(methods=['post']) 
    def some_method(self, request): 
     serializer = RubroSerializer(data=request.data) 
     if serializer.is_valid(): 
      return Response({'status': 'success'}) 
     else: 
      return Response(serializer.errors, 
         status=status.HTTP_400_BAD_REQUEST) 
1

1.Way: 你可以使用 「收益率」,而不是 「迴歸」。 這可能是支持...

2.Way:

def __str__(self): 
    for n in self: 
     return self.n 
2

其實視圖集中可以讓你實現在視圖集中createupdate方法來控制不同類型的請求的邏輯。在你的情況下,你可以這樣做:

class RubroViewSet(viewsets.ModelViewSet): 
    queryset = Rubro.objects.all() 
    serializer_class = RubroSerializer 

    # POST 
    def create(self, request): 
     super().create(request) 
     serializer = self.serializer(self.queryset, many=True) 
     return Response(serializer.data, status=status.HTTP_201_CREATED) 

    # PUT 
    def update(self, request, pk=None): 
     return super().update(request, pk) 
+0

Thaaaanks,這工作正常! –

相關問題