Return 不同的响应或数据取决于方法 - Django 休息框架

Return different reponse or data depending on method - Django rest framework

请帮忙。我需要做的是根据方法获得不同的响应或数据——像这样:

if request.method == 'POST':

return all the items created including the last one (actually it returns only >the last item created)

else if request.method == 'PUT':

return the last item updated

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

使用 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.Way: 您可以使用 "yield" 而不是 "return"。 这可能是支持...

2.Way:

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

其实viewset允许你在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)