请帮忙。我需要做的是根据方法获得不同的响应或数据 - 如下所示:
如果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__'
答案 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允许您在视图集中实现create
和update
方法来控制不同类型请求的逻辑。在你的情况下,你可以做这样的事情:
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