根据方法返回不同的响应或数据 - Django休息框架

时间:2017-08-28 07:00:32

标签: python django django-rest-framework httpresponse

请帮忙。我需要做的是根据方法获得不同的响应或数据 - 如下所示:

  

如果request.method =='POST':

     

全部退货   创建的项目包括最后一项(实际上它只返回>创建的最后一项)

     

否则如果request.method =='PUT':

     

返回最后更新的项目

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__'

3 个答案:

答案 0 :(得分: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 :(得分:2)

实际上,viewset允许您在视图集中实现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)

答案 2 :(得分:1)

<强> 1.Way: 你可以使用&#34; yield&#34;相反&#34;返回&#34;。 这可能是支持......

2.Way:

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