调用GET对象时自动进行字段更新。这是可能的吗?博士

时间:2019-12-03 17:40:12

标签: python django django-rest-framework

实现下一种情况的最佳方法是什么: 我需要在调用某个对象端点时将isCalled更改为True。 例如api/objects/1

我的模特:

class Object (models.Model):
    someObject = models.ForeignKey(User, on_delete=models.CASCADE)
    isCalled = models.BooleanField(default=False)
    # dateCalled = models.DateTimeField(auto_now=True, null=True)

我的views.py:

class SingleMessageView(generics.RetrieveUpdateDestroyAPIView):
    queryset = Message.objects.all()
    serializer_class = MessageSerializer

    # def get(self)? : #function to implement the solution should be here?


有可能吗?什么是实现它的最有效方法?将解决方案放在何处(views.py/ serializers.py)?谢谢!

1 个答案:

答案 0 :(得分:1)

覆盖 retrieve() 方法

from rest_framework.response import Response


class SingleMessageView(generics.RetrieveUpdateDestroyAPIView):
    queryset = Message.objects.all()
    serializer_class = MessageSerializer

    def retrieve(self, request, *args, **kwargs):
        instance = self.get_object()
        instance.isCalled = True
        instance.save()
        serializer = self.get_serializer(instance)
        return Response(serializer.data)