我的模型如下:
class PPost(models.Model):
owner = models.ForeignKey(
get_user_model(),
related_name='posts4thisowner',
on_delete=models.CASCADE)
furnished = models.BooleanField(verbose_name="Is Furnished", default=False,null=True,blank=True)
description = models.TextField(verbose_name="Description", max_length=500, blank=True, null=True)
viewnum=models.IntegerField(verbose_name="view num", default=0)
timestamp = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ('timestamp',)
我的详细视图如下:
class PPostDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = PPost.objects.all()
serializer_class = PPostSerializer
name = 'ppost-detail'
permission_classes = (
permissions.IsAuthenticatedOrReadOnly,
custompermission.IsCurrentUserOwnerOrReadOnly,
)
将在以下网址中使用:
urlpatterns = [
...
path('<int:pk>', views.PPostDetail.as_view(), name=views.PPostDetail.name),
]
现在我需要能够增加viewnum,模型中的一个字段表示每当request.GET被调用时帖子的查看数量就增加一;我想知道如何实现这一目标。 谢谢
答案 0 :(得分:0)
覆盖视图类的 dispatch()
方法,请参见示例
class PPostDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = PPost.objects.all()
serializer_class = PPostSerializer
name = 'ppost-detail'
permission_classes = (
permissions.IsAuthenticatedOrReadOnly,
custompermission.IsCurrentUserOwnerOrReadOnly,
)
def dispatch(self, request, *args, **kwargs):
ppost_object = self.get_object()
ppost_object.viewnum += 1
ppost_object.save()
return super(PPostDetail, self).dispatch(request, *args, **kwargs)
在Django文档中,dispatch()
method
视图的视图部分–接受请求参数的方法 加参数,然后返回HTTP响应。
默认实现将检查HTTP方法并尝试 委托给与HTTP方法匹配的方法; GET将 委托给get(),委托给post(),等等。
默认情况下,将HEAD请求委托给get()。如果你需要 以不同于GET的方式处理HEAD请求,您可以覆盖 head()方法。有关示例,请参见支持其他HTTP方法。