Как изменить логическое значение, указанное в обобщенном виде? - PullRequest
0 голосов
/ 05 июня 2019

Я хочу изменить значение по умолчанию (false) на true, когда URL активируется, когда пользователь вводит 'http://127.0.0.1:8000/api/message/read/2'. Я хочу, чтобы сообщение с идентификатором 2 изменило свое значение isRead на True.

Модель

class Message(models.Model):
    message = models.TextField(max_length=5000)
    isRead = models.BooleanField('read status', default=False)

urls.py

path('message/read/<int:pk>/', ReadMessageView.as_view(), name='read_already'),

views.py- (не уверен, что здесь делать ...)

class ReadMessageView(ListCreateAPIView):
    serializer_class = MessageReadSerializer

Ответы [ 2 ]

0 голосов
/ 06 июня 2019
class ReadMessageView(APIView):
      def post(self, request, *args,**kewargs):
           message_id = self.kwargs.get('pk')
           mess_obj = Message.objects.get(pk = message_id)
           mess_obj.isRead = True
           mess_obj.save()
           return Response('seen')
0 голосов
/ 06 июня 2019

Если вы посмотрите на класс ListCreateAPIView, он вызовет функцию списка в get (https://github.com/encode/django-rest-framework/blob/master/rest_framework/generics.py#L238).). Если вы посмотрите на список (функция https://github.com/encode/django-rest-framework/blob/master/rest_framework/mixins.py#L37), он отфильтрует набор запросов с помощью filter_queryset,так что вы можете расширить эту функцию и обновить isRead для всех объектов в наборе запросов.

Возможно, это не самое подходящее место для обновления, но его легко подключить.

def filter_queryset(self, *args, **kwargs):
  queryset = super().filter_queryset(*args, **kwargs)

  # Do your update on queryset

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