提问者:小点点

DetailView在显示前运行两次


我有一个DetailView,如果url命中一次,它会运行两次

views.py

class PortfolioDetailedView(DetailView):
    model = Portfolio
    slug_field = 'slug'

    def get_object(self):
        obj = super().get_object()
        obj.view_count+=1
        obj.save()
        return get_object()

获取数据时记录日志

[17/Jul/2020 19:53:18] "GET /portfolio/detail/test2/ HTTP/1.1" 200 14893
[17/Jul/2020 19:53:20] "GET /portfolio/detail/test2/ HTTP/1.1" 200 14893

共1个答案

匿名用户

在示例中返回get_object()而不是obj可能会导致一些问题,并且感觉有点多余。 如果要在视图中执行某些业务逻辑,重写更高级的getdispatch方法并使用get_object对我来说会更自然一些:

class PortfolioDetailedView(DetailView):
    model = Portfolio
    slug_field = 'slug'

    def dispatch(self, request, pk, *args, **kwargs):
        obj = self.get_object()
        obj.view_count += 1
        obj.save()
        return super().dispatch(request, *args, **kwargs)