2017-08-28 40 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,这工作正常! –

相关问题