如何更改泛型视图中给定的布尔值?

时间:2019-06-05 20:09:19

标签: python django django-rest-framework

我想在触发url时将默认值(false)更改为true 当用户输入“ http://127.0.0.1:8000/api/message/read/2”时 我希望ID为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 :(得分:0)

如果您查看ListCreateAPIView类,它将在get(https://github.com/encode/django-rest-framework/blob/master/rest_framework/generics.py#L238)上调用list函数。然后,如果您查看列表(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

答案 1 :(得分:0)

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