作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
谢谢你一直以来。我会问。(我很抱歉英语不太好)
我正在使用 React 作为前端,所以我刚刚启动了 Django rest 框架。
但是 django-rest-framework 让我感到困惑,所以我问。
作为一个简单的例子,当我点击 crud 中的显示页面时,我想自动增加 view_count。
我应该在 app_name/api/views.py 中写什么功能?
这是我的代码..
# notice/models.py
from django.db import models
# Create your models here.
class Notice(models.Model):
title = models.CharField(max_length=120)
description = models.TextField()
view_count = models.IntegerField(default=0)
def __str__(self):
return self.title
# notice/api/views.py
from rest_framework import viewsets
from notice.models import Notice
from .serializers import NoticeSerializer
from django.http import JsonResponse
class NoticeViewSet(viewsets.ModelViewSet):
serializer_class = NoticeSerializer
queryset = Notice.objects.order_by('title')
# notice/api/serializers.py
from rest_framework import serializers
from notice.models import Notice
class NoticeSerializer(serializers.ModelSerializer):
class Meta:
model = Notice
fields = ('id','title','description','view_count')
最佳答案
您可以在 NoticeViewSet.retrieve()
方法中添加增量。这是当您检索单个对象时调用的 View 方法,因此它是有道理的。您也可以将它添加到 list
View 方法中,但是根据查询集的大小,它可能会变得很慢。
class NoticeViewSet(viewsets.ModelViewSet):
serializer_class = NoticeSerializer
queryset=Notice.objects.order_by('title')
def retrieve(self, request, *args, **kwargs):
obj = self.get_object()
obj.view_count = obj.view_count + 1
obj.save(update_fields=("view_count", ))
return super().retrieve(request, *args, **kwargs)
如果您还想在列出通知时计算浏览量,请使用此类:
class NoticeViewSet(viewsets.ModelViewSet):
serializer_class = NoticeSerializer
queryset=Notice.objects.order_by('title')
def retrieve(self, request, *args, **kwargs):
obj = self.get_object()
obj.view_count = obj.view_count + 1
obj.save(update_fields=("view_count", ))
return super().retrieve(request, *args, **kwargs)
def list(self, request, *args, **kwargs):
# You could also increment the view count if people see the `Notice` in a listing.
queryset = self.filter_queryset(self.get_queryset())
for obj in queryset:
obj.view_count = obj.view_count + 1
obj.save(update_fields=("view_count", ))
return super().list(request, *args, **kwargs
关于django - 我如何在 django-rest-framework 中制作 'view_count'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56228485/
我是一名优秀的程序员,十分优秀!