Пожалуйста помоги. Что мне нужно сделать, это получить разные ответы или данные в зависимости от метода - что-то вроде этого:

if 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__'
1
Gerald E. 28 Авг 2017 в 10:00

3 ответа

Лучший ответ

Использование 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)
2
Monish K Nair 28 Авг 2017 в 07:11

На самом деле viewset позволяет вам реализовывать методы create и update в viewset для управления логикой различных типов запросов. В вашем случае вы можете сделать что-то вроде этого:

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
neverwalkaloner 28 Авг 2017 в 07:13

< Сильный > 1.Way : Вы можете использовать «yield» вместо «return». Это может быть поддержка ...

< Сильный > 2.Way :

def __str__(self):
    for n in self:
         return self.n
1
R Palanivel-Tamilnadu India 28 Авг 2017 в 07:11