Джанго отдых обновить одно поле - PullRequest
0 голосов
/ 02 мая 2018

Я только начал работать с Джанго и застрял на чем-то, что, на мой взгляд, должно быть простым, но я не знаю, как это сделать.

У меня есть такая модель:

id = models.AutoField(primary_key=true)
...
amount = models.IntegerField()
...

Как правило, пользователь задает сумму, и модель необходимо обновить, указав текущую сумму + сумму, введенную пользователем.

Я использую сериализаторы для создания новых объектов, но я не знаю, как их использовать для этого.

1 Ответ

0 голосов
/ 02 мая 2018

Предположим следующее:

  1. ваша модель называется MyModel
  2. ваш класс сериализатора имеет имя MyModelSerializer
  3. AmountPartialUpdateView расширяется APIView
  4. Ваш частичный URL-адрес обновления определяется следующим образом: передается в переменной URL pk, а сумма для добавления передается в переменной URL amount:

    urlpatterns = patterns('',
        # ...
        url(r'^model/update-partial/(?P<pk>\d+)/(?P<amount>\d+)$', AmountPartialUpdateView.as_view(), name='amount_partial_update'),
        # ...
    )
    

Затем вы должны реализовать правильную логику обновления в методе AmountPartialUpdateView.patch(). Один из способов сделать это:

from django.shortcuts import get_object_or_404
from rest_framework import Response


class AmountPartialUpdateView(APIView):

    def patch(self, request, pk, amount):
        # if no model exists by this PK, raise a 404 error
        model = get_object_or_404(MyModel, pk=pk)
        # this is the only field we want to update
        data = {"amount": model.amount + int(amount)}
        serializer = MyModelSerializer(model, data=data, partial=True)

        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        # return a meaningful error response
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Таким образом, посетив URL

model/update-partial/123/5

Вы увеличите amount идентификатора модели 123 на 5 единиц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...