我想在触发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
答案 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')