在djangorest框架中检索后如何更新特定字段

gijlo24d  于 2023-02-20  发布在  Go
关注(0)|答案(1)|浏览(123)

在djangorest框架中检索后如何更新特定字段

# Models.py
class Article(models.Model):
    title = models.CharField(max_length=255)
    body = models.TextField()
    view = models.IntegerField(default=0)

    def __str__(self):
        return self.title

我想在读取特定数据后更新视图。

# Views.py
class ArticleDetail(generics.RetrieveUpdateAPIView):
    queryset = Article.objects.all()
    serializer_class = ArticleSerializer
    # Update view + 1 

# serializers.py
class ArticleSerializer(serializers.ModelSerializer):

    class Meta:
        model = Article
        fields = "__all__"

请帮帮我

jrcvhitl

jrcvhitl1#

如果希望字段仅在GET请求时递增,可以在retrieve方法中更新它:

# views.py
class ArticleDetail(generics.RetrieveUpdateAPIView):
    queryset = Article.objects.all()
    serializer_class = ArticleSerializer

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

如果您希望它同时以GETPATCH递增,则可以改为在get_object中更新它:

# views.py
class ArticleDetail(generics.RetrieveUpdateAPIView):
    queryset = Article.objects.all()
    serializer_class = ArticleSerializer

    def get_object(self):
        instance = super(ArticleDetail, self).get_object()
        instance.view = instance.view + 1
        instance.save()
        return instance

相关问题